Mail Archives: djgpp/2005/02/09/17:16:40
X-Authentication-Warning: | delorie.com: mail set sender to djgpp-bounces using -f
|
From: | Mok-Kong Shen <mok-kong DOT shen AT t-online DOT de>
|
Newsgroups: | comp.os.msdos.djgpp
|
Subject: | bit shifting problem
|
Date: | Wed, 09 Feb 2005 23:07:02 +0100
|
Organization: | T-Online
|
Lines: | 26
|
Message-ID: | <cue1dv$n1b$00$1@news.t-online.com>
|
Mime-Version: | 1.0
|
X-Trace: | news.t-online.com 1107986688 00 23595 K2CQrh1L97nrSXGe 050209 22:04:48
|
X-Complaints-To: | usenet-abuse AT t-online DOT de
|
X-ID: | EejvXaZVwetWeVcYdP-rP-K+9usH1WK3CjJbxXU3m8WpzvVpLLX5ZK
|
User-Agent: | Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)
|
X-Accept-Language: | en-us, en
|
To: | djgpp AT delorie DOT com
|
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp
|
Reply-To: | djgpp AT delorie DOT com
|
Sorry for posing yet another, possibly also newbie, problem.
In the following code I expected the values of k and n to be
both 0, since shifting 32 bits for a 32-bit word effectively
clears it. But the values printed were 42800637 and 1369620384.
The compiler did give the warning message "right shift count
>= width of type". But shifting 32 bits (not exceeding the
word size) is allowed or is it forbidden by the C standard?
Thanks.
M. K. Shen
--------------------------------
#include <stdio.h>
int main()
{ int i,j,k,n;
unsigned long w;
w=42800637;
i=w>>31;
j=i>>1;
k=w>>32;
n=(w<<5)>>32;
printf("%lu %d %d %d %d\n",w,i,j,k,n);
return 0;
}
- Raw text -