回覆列表
-
1 # 使用者4440064888598
-
2 # 菠蘿小仙女南巷薄荷微
如果要彙編指令的話,這樣就行:NEGAL(取負指令,要先判斷是不是負數)
如果要知道怎麼計算的話:
比如:10010110b(這是以補碼形式表示的負數,假設都是8位數)
反碼:10010101b(補碼-1,因為由反碼計算補碼是反碼+1得到補碼)
原碼:11101010b(這就是那個負數的原碼)
取正:01101010b(直接把最高位換成0)
得到的就是絕對值
-
3 # 湯圓電影Vlog
在二進位制補碼系統中,人為規定最高位是符號位,"0"表示正數,"1"表示負數。這是人為規定的,沒有什麼“為什麼”可言。就像交通規則,車靠右行就是某些國家硬性規定的。
所以整數就有“有符號整數”和“無符號整數”之分啊,比如你說的8位的整數,如果按無符號整數來用,那麼最小值0(二進位制0000-0000),最大值是255(1111-1111),總數是256個,而如果作為有符號整數來用,則最小值為-128(二進位制1000-0000),最大值為127(0111-1111),總數也還是256個。由於8位整數的容量太小(只有256個),所以在大多數程式設計語言中都把8位整數設為無符號整數(即0到255,通常叫做位元組型或Byte型)。而16位、32位、64位整數則通常都是有符號整數:16位整數的最小值為 -32768(二進位制 1000-0000-0000-0000),最大值為32767(0111-1111-1111-1111),如果超過這個範圍(比如32768),那麼程式就會報“溢位”的錯誤,這種情況下就要擴大數的位數才行了。32位和64位的原理是一樣的,這裡就不列出來了。所以你說的如果正數的最高位為1怎麼辦的問題,回答就是自動變為負數了,或者說如果最高位為1那這個數就不是正數,除非是8位無符號整數(但你也必須知道,無符號整數只有正數和0,沒有負數)。補充說一下:在有符號整數中,最高位稱為符號位,就是用它來表示數的正負的,也正因為如此,數值的最大值會減小一半(比如16位整數的65535減少為32767),與此同時,最小值也由0變為負數(-32768),但加起來的總數(65536)是不變的。