簡體   English   中英

C中的位操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM