的作品我有這樣的一段代碼,你可以給我解釋一下輸出無法弄清楚如何〜運算符在C
unsigned int x=3;
~x;
printf("%d",x);
輸出爲10 我不能讓它如何。
我編上的Turbo C代碼
的作品我有這樣的一段代碼,你可以給我解釋一下輸出無法弄清楚如何〜運算符在C
unsigned int x=3;
~x;
printf("%d",x);
輸出爲10 我不能讓它如何。
我編上的Turbo C代碼
您發佈的代碼不會編譯。如果您將~x
更改爲x = ~x;
,它會進行編譯,但不會輸出「10」。
~
運算符創建給定數字的按位倒數。在二進制中,數字3作爲八位整數由位00000011
表示。 ~
運營商將用相反的代替這些比特中的每一個,給出11111100
,其爲252無符號或-4簽名。
您將x
聲明爲unsigned int
,這意味着大多數平臺上的32位無符號值。所以你的原始值是00000000 00000000 00000000 00000011
,而反過來是11111111 11111111 11111111 11111100
或4294967292.
發佈的代碼*將*編譯,它只是不會對'x'做任何事... ... – 2010-02-11 04:42:54
@Mark:不,當JS Bangs寫下他的回答有一個失蹤者; (請參閱有問題的編輯),因此代碼*不會編譯。 – Ramashalanka 2010-02-11 05:06:57
@Ramashalanka,夠公平的。 – 2010-02-11 05:09:08
要打印無符號的價值,尤其是操作位時,使用無符號格式printf
:
printf("%u", x);
我不知道你」實際上運行你展示的代碼。看到這一點:
#include <stdio.h>
int main()
{
unsigned int x = 3;
unsigned int y = ~x;
printf("Decimal. x=%u y=%u\n", x, y);
printf("Hex. 0x%08X y=0x%08X\n", x, y);
return 0;
}
輸出:
Decimal. x=3 y=4294967292
Hex. 0x00000003 y=0xFFFFFFFC
爲什麼值,因爲它們應該是基本的二進制算術(和牢記的是C'S ~
操作翻轉其參數的位)明顯。
你真的編寫代碼/編譯並運行它,它給你10嗎?或者你剛剛在某處讀過這些東西? – 2010-02-11 04:22:17
該代碼示例看起來不像編譯。 '〜x'後面有一個缺失的分號。 – 2010-02-11 04:27:59
該代碼將打印'3':http://ideone.com/S9Ht6DfT – 2010-02-11 04:42:15