有符號數和無符號數區別

2021-10-03 11:03:45 字數 1330 閱讀 7978

在計算機中,數值型別分為整數型或實數型,其中整型又分為無符型別或有符型別,而實型則只有符型別。 字元型別也分為有符和無符型別。在程式中,使用者可以自己定義是否需要乙個非負整數;

用char來舉例吧,char佔乙個位元組,乙個位元組=8個二進位制位,所以它可以表示2^8個數,也就是256個數。若想要表示正負號,一般需要乙個位來標記,如取最高代表正負號,則有符號和無符號的數值最大值對比如下:

1 有符號:0111

1111=2

^6+2

^5+2

^4+2

^3+2

^2+2

^1+2

^0=127;==

> 範圍是 -

128~

1272

3 無符號:1111

1111=2

^7+2

^6+2

^5+2

^4+2

^3+2

^2+2

^1+2

^0=255;==

> 範圍是 0

~255

可以看出無符號數只有正數,沒有負數,所以比如乙個8位元可以儲存的最大正數的個數是2的8次方也就是256.而有符號數,因為要相容負數的可能性,就要犧牲乙個位元來做符號表明.所以乙個有符號數的最大正數的個數就是2的(8-1次方)再減掉1…是127.

我們可以在程式中直觀的看一下他們之間的區別:

int

main()

結果如下:

結果發生了變化,因為定義的c是有符號數,又因為c的表示範圍是-128~127,所以當賦值c為128超過他的表示範圍是,顯示的值變為-128,有個小技巧,即128-256=-128,,若賦值-129,超過了其負數表示範圍,就變成了-129+256=127,程式驗證:

int

main()

還有乙個問題就是溢位的問題,char是個8位的二進位制數,若超過了八位,就只算其16進製制的末尾的兩位的大小。比如unsigned char的表示範圍是0x00~0xff,若表示0x8ff,則溢位,指標是後兩位,即ff,8忽略掉,程式驗證:

int

main()

有符號數和無符號數

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

無符號數和有符號數

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

有符號數和無符號數

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