作者 主題: 八進位,十六進位  (閱讀 13142 次)

0 會員 與 1 訪客 正在閱讀本文。

xtreming

  • 懷疑的國中生
  • **
  • 文章數: 53
    • 檢視個人資料
八進位,十六進位
« 於: 2002-05-21 16:40 »
請問各位大大,負數在八進位和十六進位怎麼算,謝謝。

barku

  • 懷疑的國中生
  • **
  • 文章數: 49
    • 檢視個人資料
八進位,十六進位
« 回覆 #1 於: 2002-05-22 13:47 »
和十進位一樣啊!

eg 十進位.

7 - 13 = - (13 - 7) = - ((3 + 10) - 7) = -(3 + (10 - 7)) = -(3 + 3) = -6

八進位也是一樣的.
只是要注意 10-7 = 1
所以
7 - 13 = - (13 - 7) = - ((3 + 10) - 7) = -(3 + (10 - 7)) = -(3 + 1) = -4

十六進位時.
10 - 7 = 9
7 - 13 = - (13 - 7) = - ((3 + 10) - 7) = -(3 + (10 - 7)) = -(3 + 9) = -C

十進位只是因為我們習慣了,
不然,八進位,十六進位或是二進位算法都是一樣的.

夢想^^
at Right, Stay Fit, Die Anyway!!

xtreming

  • 懷疑的國中生
  • **
  • 文章數: 53
    • 檢視個人資料
八進位,十六進位
« 回覆 #2 於: 2002-05-22 14:55 »
請問十進位的-432換算成八進位和十六進位怎麼算

barku

  • 懷疑的國中生
  • **
  • 文章數: 49
    • 檢視個人資料
八進位,十六進位
« 回覆 #3 於: 2002-05-22 15:20 »
十進位的 -432
在八進位中,
432/8 = 54 餘 0 所以個位數是 0
54/8 = 6 餘 6 所以十位數是 6
6/8 = 0 餘 6 所以百位數是 6
>>> -660

在十六進位中,
432/16 = 27 餘 0 所以個位數是 0
27/16 = 1 餘 11 所以十位數是 B
1/16 = 0 餘 1 所以百位數是 1
>>> -1B0


夢想^^
at Right, Stay Fit, Die Anyway!!

xtreming

  • 懷疑的國中生
  • **
  • 文章數: 53
    • 檢視個人資料
八進位,十六進位
« 回覆 #4 於: 2002-05-22 17:21 »
我也是這樣算的,但那個書的答案居然是
八進位
37777777120

十六進位
fffffe50

所以我覺得很納悶

barku

  • 懷疑的國中生
  • **
  • 文章數: 49
    • 檢視個人資料
八進位,十六進位
« 回覆 #5 於: 2002-05-22 18:13 »
要注意哦!
我寫的和書上是不一樣的

八進位
-660
37777777120

十六進位
-1B0
fffffe50

我有放(負號)在前面.
假如不放的話,要根據運算的位元大小
及使用的負號表示法去運算.

所以,用負號其實是比較正確的 (一定不會錯),
只不過,電腦不會懂負號是啥?
所以要根據不同系統用的負號去轉換.


夢想^^
at Right, Stay Fit, Die Anyway!!

  • 實習板主
  • 活潑的大學生
  • ***
  • 文章數: 270
    • 檢視個人資料
八進位,十六進位
« 回覆 #6 於: 2002-05-22 22:07 »
那是補數表示法

算了一下它是用四個位元組表示的有號整數(32bit),這種表法把第一個bit當成正負值的指標。

也就是說數值範圍超過2^31以上的數值會被當成負數(只有電腦才會這樣認法)
表示範圍2147483648 ~ -2147483647算長整數吧!也是不小的天文數字了。

它是用40000000000-660來表示-660(八進位)
或者100000000-1B0來表示-1B0(十六進位)

因為660+37777777120 =40000000000(剛好是2^32溢位了)
  fffffe50 +1B0 = 100000000(剛好是2^32溢位了)


電腦只會看到1後面那32個0值(二進位),也就是四位元組有號整數表法的0

所以稱為補數表法(互補的意思)

xtreming

  • 懷疑的國中生
  • **
  • 文章數: 53
    • 檢視個人資料
八進位,十六進位
« 回覆 #7 於: 2002-05-23 14:05 »
謝謝各位大大,雖然還是不知何謂補數和溢位。

barku

  • 懷疑的國中生
  • **
  • 文章數: 49
    • 檢視個人資料
八進位,十六進位
« 回覆 #8 於: 2002-05-23 14:31 »
簡單一點的來說,八位元的表示法中,
因為只有八個位元能儲存一個數目,
所以就是 0 - 255.
(以十進位來說,要注意進位以及位元的不同)

當要儲存負數時,由於沒辦法在前面放個負號,
所以我們把0-255 分給正負兩邊用.

-128 -> -127 -> ...... -> -1 -> 0 -> 1 -> ..... -> 126 -> 127

而八位元中,因不能放負號,所以對應為
128 -> 129 -> ..... -> 255 -> 0 -> 1 -> ..... -> 126 -> 127

為什麼要這樣排列呢??

比方說, 25 - 10 要怎樣做呢?

25 - 10 = 25 + (-10)

25 是25
-10 是 246

25 + 246 = 271
而八位元最多只到 255.
256就溢位了.

271 - 256 = 15 也就是 25-10 = 15 了.

這樣解釋還可以吧!

不過,其實補數的方法有好幾種,這只是其中一種而已.


夢想^^
at Right, Stay Fit, Die Anyway!!