無符號和有符號數底層溢位判斷

2022-07-10 06:42:13 字數 574 閱讀 4095

無符號和有符號數進行運算,在機器層面上所做運算相同,編譯器區分兩種運算是否溢位,依賴於cf(carry flag)和of(over flag)位。

最高位出現進製置1,否則置0。例:

+  1000

———————         cf置1 

1   0000 

最高位和次高位進製不同置1,相同置0。例:

+  1000

———————         of置1 

1   0000 

+  1100

———————         of置0

1   1000 

底層不知道運算的數是有無符號,所以將兩種情況的溢位判斷分別反應到of和cf標誌位。編譯器了解是否有符號,若是有符號,檢視of判斷溢位。若是無符號,檢視cf判斷溢位。  

設暫存器有4位,有符號數範圍(-8~7),無符號數範圍(0~15),

1100b+1100b = 1  1000

有符號視角:-4+(-4)= -8,最高位和次高位進製都為1,of=0,所以無溢位

無符號視角:12+  12   =  24,最高位進製為1,cf=1,溢位 

有符號數和無符號數

有符號和無符號整數 1.通常情況下,大多數字預設的是有符號數,比如 4,5 要想寫乙個無符號數必須在後面加u 比如 4u,5u 2.在計算機中有符號數是用補碼的形式來表示的,最高位是符號位。無符號數就是正數唄 正數的補碼和原碼相同。比如 1 在計算機中表示為 11111111 11111111 11...

無符號數和有符號數

人有十個手指頭,習慣了逢十進一,於是十進位製成了生活中的標準。程式的世界只有高低電平兩種狀態,更適合用二進位制來表示,於是二進位製成了程式世界的標準。對與無符號數來說,我們更喜歡談他們之間的轉化,十進位制是我們最習慣的進製,於是十進位制轉為r進製,r進製轉為十進位制變尤為重要。十進位制 r進製 整數...

有符號數和無符號數

刷題刷到了有符號數的問題,回顧一下知識點 有符號數 signed 可以區分正負數 最高位表示數值的正負 0表示正數,1表示負數 無符號數 unsigned 不區分正負數 只有整數型別 雖然無符號數所能表示的最大數值大於有符號數,但兩者所能表示的數值範圍相同。eg.short int 128,0 0,...