2017-04-20 51 views

回答

0

操作符〜C++中(以及類似的C和Java其他類似C語言)執行按位非操作 - 中的所有操作數的1位被設置爲0,並且所有的0比特在操作數是設置爲1.換句話說,它會創建原始數字的補碼。欲瞭解更多信息,請參閱here

按位NOT運算符有一個有趣的屬性,當用2的補碼錶示的數字應用 ,它改變了數字的 簽收再減去一個(你可以在上面的例子中看到)。

如果你檢查什麼的〜 - 運算符不爲y這樣的:

#include <stdio.h> 

int main() 
{ 
    unsigned int x = -1; 
    printf("%i\n",x); // treat data as if singed integer 
    printf("%u\n",x); // treat data is if unsigned integer 

    int y = ~0; //type promotion from int to unsigned int 
    printf("%i\n",y); 
    if (x == y) 
     printf("same"); 
    else 
     printf("not same"); 
    return 0; 
} 

你可以看到:

成功時刻:0記憶:16064信號:0

-1 same

T ry出here

這是爲什麼?

爲整數-1位表示爲(見two's complement瞭解詳細信息)

11111111 11111111 11111111 11111111 

如果在無符號整數讀這

11111111 11111111 11111111 11111111 

是最大可能的無符號整型。由於環繞,無符號整數-1成爲最大無符號整數。因此,無符號-1和int〜0是相同的。

相關問題