Date: Tue, 03 Apr 2007 20:22:15 +0300 From: Andriy Gapon <avg@icyb.net.ua> To: freebsd-hackers@freebsd.org Subject: strange bit-shifting Message-ID: <46128D47.50109@icyb.net.ua>
next in thread | raw e-mail | index | archive | help
$ cat test_shl.c
#include <stdint.h>
#include <stdio.h>
int main()
{
uint64_t l;
l = 0;
l--;
printf("%.16lX\n", l);
l <<= 64;
printf("%.16lX\n", l);
return 0;
}
$ cc test_shl.c -o test_shl
test_shl.c: In function `main':
test_shl.c:11: warning: left shift count >= width of type
$ ./test_shl
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
$ uname -srm
FreeBSD 6.2-RELEASE-p2 amd64
$ gcc -v
Using built-in specs.
Configured with: FreeBSD/amd64 system compiler
Thread model: posix
gcc version 3.4.6 [FreeBSD] 20060305
What gives ? It looks like shift is actually done not by specified
number of bits but by that number modulo 64.
Please also mind that the same thing happens if I use a variable instead
of a constant in that expression.
--
Andriy Gapon
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?46128D47.50109>
