指定負數給unsigned

2009-09-24 5:38 am
如果把-1指定給unsigned型態

為什麼會變成4294967295?

在電腦底是什麼原理讓他會變成這樣的?

回答 (3)

2009-09-24 6:06 am
✔ 最佳答案
一般int為4個Bytes

最左邊位元(MSB)用來表示SIGN(符號)

可表示的範圍為-2147483648~2147483647(80000000 H~7FFFFFFF H)

unsigned int A的話表示這個A是無號數

可表示的範圍為0~4294967295(00000000~FFFFFFFF)

-1在電腦中為1取2補數

00000001 H -> (2's) = FFFFFFFF H = 4294967295(10進制)
2009-09-24 4:54 pm
同樣的空間,填入同樣的值,
只是因為讀取出來的時候,賦予不同的意義。

以兩個Bytes做例子,
記憶體內容:0xFFFF => unsigned int = 65535
記憶體內容:0xFFFF => signed int = -32767

以一個Bytes做例子,
記憶體內容:0x30 => 數字 = 48(10)
記憶體內容:0x30 => char = '0'
2009-09-24 6:05 am
電腦處理的每個資料型態,都有它們的數值範圍。

我舉個例子:假設 int 型態是 -10 到 +10,那麼 unsigned 後的 int 範圍是 0 到 20!當你把 -1 指定給無號時,就像時鐘的指針一樣,倒退指向 20,它會顯示 20!

所以也是要看程式設計人員的編寫方式,不是說編譯器編譯正確就行了,而是要看執行的結果是否符合與滿足設計人員的需求!

根據目前的電腦科技,電腦處理的資料型態,範圍是有限制的,不可能是無窮大的。


收錄日期: 2021-04-27 17:16:58
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20090923000015KK08077

檢視 Wayback Machine 備份