[英]Bit manipulation in c
int samp=0;
for(i=0;i<=31;i++)
{
samp=samp|1<<i;
}
printf("\ %d\n",samp);
輸出:
-1
如果我循環到i<=31
(將所有32位設置為1),為什么給出-1? 當我僅循環i<31
它會給出2147483647。為什么會這樣?
發生這種情況是因為第一位是符號位。
當符號位為1
,數字為負,並且11111111 11111111 11111111 11111111
恰好是數字-1
的32位表示形式。
您可能要檢查出Two's Complement 。
在您的printf語句中,您正在使用%d ,它輸出一個帶符號的integer 。 由於設置了符號位,因此輸出正確。
將格式字符串更改為%u ,它將顯示無符號整數值。 沒有更多的符號位和您想要的值。
無論如何,您都應該將unsigned int用於samp 。
由於現代計算機中的帶符號整數表示為兩個補碼: http : //en.wikipedia.org/wiki/Two%27s_complement
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.