From owner-freebsd-hackers@FreeBSD.ORG Tue Apr 3 17:22:20 2007 Return-Path: X-Original-To: freebsd-hackers@freebsd.org Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id CFEDF16A401 for ; Tue, 3 Apr 2007 17:22:20 +0000 (UTC) (envelope-from avg@icyb.net.ua) Received: from gateway.cybervisiontech.com.ua (gateway.cybervisiontech.com.ua [88.81.251.18]) by mx1.freebsd.org (Postfix) with ESMTP id 89E2913C465 for ; Tue, 3 Apr 2007 17:22:20 +0000 (UTC) (envelope-from avg@icyb.net.ua) Received: from localhost (hq.cybervisiontech.com [127.0.0.1]) by gateway.cybervisiontech.com.ua (Postfix) with ESMTP id 17DCDED533E for ; Tue, 3 Apr 2007 20:22:14 +0300 (EEST) X-Virus-Scanned: amavisd-new at cybervisiontech.com Received: from gateway.cybervisiontech.com.ua ([127.0.0.1]) by localhost (hq.cybervisiontech.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Ubk5UU+33MtZ for ; Tue, 3 Apr 2007 20:22:11 +0300 (EEST) Received: from [10.2.1.87] (rein.cybervisiontech.com.ua [10.2.1.87]) by gateway.cybervisiontech.com.ua (Postfix) with ESMTP id 0BBFAED532E for ; Tue, 3 Apr 2007 20:22:11 +0300 (EEST) Message-ID: <46128D47.50109@icyb.net.ua> Date: Tue, 03 Apr 2007 20:22:15 +0300 From: Andriy Gapon User-Agent: Thunderbird 1.5.0.10 (X11/20070329) MIME-Version: 1.0 To: freebsd-hackers@freebsd.org Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: strange bit-shifting X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Apr 2007 17:22:20 -0000 $ cat test_shl.c #include #include 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