2012-12-13 87 views
1

OK,我想打印一個比較大的unsigned long long和十進制/十六進制版本我得到相當怪異的結果...無符號長隆 - 怪異輸出

代碼:

unsigned long long a = 1llu<<63; 

printf("decimal = %llu\n",a); 
printf("hexadecimal = %llx\n",a); 

輸出:

decimal = 9223372036854775808 
hexadecimal = 8000000000000000 

現在,這裏就是:

  • 十六進制輸出正確的。
  • 小數輸出(應該是9223372036854780000

爲什麼這麼回事?我究竟做錯了什麼???

+0

2^63是它打印的內容。我看到這裏沒有問題。 – chris

+0

可能重複?雖然有趣:http://stackoverflow.com/questions/2844/how-do-you-printf-an-unsigned-long-long-int – abelito

+0

@chris真的嗎?我認爲它甚至不適合64位整數,是嗎?如果是這樣,爲什麼? –

回答

8

由於五不是任何兩個冪的因子,所以兩個冪的兩端都不爲零。你的其他來源9223372036854780000不正確。

+1

我的其他來源是Mac OS X的程序員計算器。但是,你的數學觀點絕對有道理。 –

+1

@ Dr.Kameleon打孔「1 << 63」給出一個以808結尾的數字。對於2^63使用科學計算器的2^x按鈕,則切換到編程器模式導致9,223,372,036,854,776,000。不確定你做了什麼。 – Potatoswatter

+0

我真的很困惑。剛剛切換到「程序員」視圖。 '1''X << Y''63'。它仍然輸出錯誤的值。 - 東西是二進制顯示(在主計算器框下)顯示它應該是的數量。 –