C 有符號數和無符號數

2021-04-12 15:03:11 字數 749 閱讀 7883

1. 有符號數和無符號數:

c支援所有整形資料型別的有符號數和無符號數運算。儘管c標準並沒有指定某種有符號數的表示,但是幾乎所有的機器都使用二進位制補碼。通常,大多數數字預設都使有符號的,c也允許無符號數和有符號數之間的轉換,轉換原則是基本的位表示保持不變。因此在一台二進位制補碼機器上,當從無符號數轉換為有符號數時,效果就是應用u2tw,而從有符號轉換為無符號數時,就是應用函式t2uw,其中w表示資料型別的位數。

t2uw(x) = (x<0)?(x+2w) :x;

u2rw(x) = (x<2w-1)?x:(x-2w);

void

testu2t()

void

testextension()

...

執行結果和結果分析:

sx=-12345       cfc7

usx=53191       cfc7

x=-12345    ffffcfc7(符號擴充套件,算術右移)

ux=53191    0000cfc7(零擴充套件,邏輯右移)

另外:從乙個資料大小到另乙個資料大小,以及無符號和有符號數字之間的轉換的相對順序能夠影響乙個程式的行為。e.g.(short sx=-12345): (unsigned)(int)sx != (unsigned)(unsigned short)sx

3. 截斷數字的位表示:

當將乙個較小的資料型別轉換到乙個較大的資料型別時,需要截斷該數字的高n位。 

有符號數和無符號數

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

無符號數和有符號數

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

有符號數和無符號數

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