簡體   English   中英

類型轉換

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

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