[英]Typecasting Inversion
我真的不明白為什么我必須在反演后對變量b
進行類型轉換(一元運算operator ~
)。 任何人都可以解釋為什么需要它嗎?
unsigned char a = 0xFF;
unsigned char b = 0x00;
return (a == (~b)); //expected to return 1 but 0
...
return (a == (unsigned char)(~b)); //after typecast returns 1 as expected
~b
結果是提升類型int
(通常是b
與任何其他一元運算符的結果+
, -
或~
)所以你需要對結果進行類型轉換。
來自C11規范草案第6.5.3.3節一元算術運算符:
〜運算符的結果是其( 提升的 )操作數的按位補碼(即,當且僅當未設置轉換后的操作數中的相應位時,才會設置結果中的每個位)。 整數提升在操作數上執行 , 結果具有提升類型 。 如果提升類型是無符號類型 ,則表達式~E等於該類型中可表示的最大值減去E.
所以,
unsigned char b = 0x00;
/* ~b = 0xFFFFFFFF (assuming 4 byte int), (unsigned char)~b = 0xFF */
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.