操作符〜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是相同的。