我只是想知道爲什麼n = 0在這裏?C++:爲什麼char c = 0xff和int n = c + 1得到100的結果?
char c = 0xff;
int n = c+1;
cout << n << endl;
system("pause");
1)C = 0xff的
2)0xff的+ 1 = 0x100的。
你能解釋一下嗎?
我只是想知道爲什麼n = 0在這裏?C++:爲什麼char c = 0xff和int n = c + 1得到100的結果?
char c = 0xff;
int n = c+1;
cout << n << endl;
system("pause");
1)C = 0xff的
2)0xff的+ 1 = 0x100的。
你能解釋一下嗎?
假設一個無符號char
類型,0xff
會給十進制值255添加一個到,你會得到256或0x100
或256這將被打印出來100
如果操縱了std::cout
十六進制打印與std::cout << std::hex;
假設8位簽名char
,0xff
會溢出,給-1。加1即可得到0.
世界上有10種類型的人使用二進制和那些誰不 – tletnes
他們的忍者編輯打破了你的答案。 – user7116
@sixlettervariables我開始懷疑我是否會生氣... – juanchopanza
您的平臺顯然使用簽名char
類型。當你用0xFF
初始化它時,它會溢出並導致實現定義的行爲。您的c
結果等於-1
。當您將1
添加到-1
時,您將獲得0
。這裏沒什麼特別的
聲明你c
爲unsigned char
,所得n
值將是0x100
,這是你預期大概是什麼。
但是(s)他沒有得到0 ... –
@Oli Charlesworth:問題的標題與問題的主體相矛盾。在他的身上,他說'n'是0. – AnT
啊,在這種情況下,我正在刪除我的答案... –
如果將這些語句包裝在'int main(){...}'中,我認爲你應該得到0或256. 100從哪裏來? – aschepler
因此,在題目中你問「爲什麼是100?」,而在問題的主體中,你問「爲什麼是n = 0?」。那麼,它是什麼? 100?還是0? – AnT