簡體   English   中英

為什么等號移位打印出與不等情況相反的不同結果?

[英]Why does bit shifting with equal sign prints out different result opposed to non-equal case?

為什么 01 和 02 大小寫不同?

char c=0xAB;
printf("01:%x\n", c<<2); // fffffeac
printf("02:%x\n", c<<=2); //ffffffac
printf("03:%x\n", c<<=2);

隱式促銷。

您在一個使用二進制補碼以本機機器格式表示數據的系統上, char已簽名並具有 8 位,而int在您的機器上具有 32 位。

c<<2中的c2隱式提升int ,因此它變為(int)c << (int)2 c0xAB(int)c符號擴展為 32 位,所以它是0xffffffab 然后<<2發生,因此結果值為0xfffffeac

c <<= 2 c 0xfffffeac ,然后整個表達式的值在賦值后變成c的值。 因此, c << 2(int)0xfffffeac 0xffffeac 的結果在分配給c時被轉換為char 因為char在您的機器上有 8 位,所以該值被截斷為 8 位,並且c等於0xac 再一次, 默認參數提升發生在變量參數 function 調用中作為變量參數列表一部分的每個參數,如printf(const char *, ...); - ..之后的每個參數都經過默認參數提升。 那么c現在等於0xac再次符號擴展到 32 位到int ,所以變成0xffffffac

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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