在大學裡面學習計算機組成原理的時候,經常搞不懂一些數的取值範圍到底是怎麼得來的,比如有的整數的取值範圍是-32768~32767,為什麼負數和正數不對稱呢?
到現在自己還是很迷糊,故查閱了一些資料,現在說明一下:
整型的寬度是乙個字(編譯器不同,整數的取值範圍也不同,有的編譯器整數是4個位元組),也就是2個位元組,16個二進位制位,最高一位二進位制位用來表示符號(正或負),那麼剩下的15位來表示數值。01111111 11111111是32767,最大的正整數
00000000 00000001是1
00000000 00000000是0
11111111 11111111是-1(不是-32767)
10000000 00000001是-32767(不是-1)
10000000 00000000是-32768(不是-0),最小的負整數
計算機表示數主要從運算方式的一致性來考慮。
比如00000000 00000001表示1很好理解,但是11111111 11111111為什麼是-1呢?
按照二進位制加法
11111111 11111111 + 00000000 00000001= 1 00000000 00000000
結果超出了整型的寬度,溢位部分被忽略,最後的計算機結果是00000000 00000000
那麼換成十進位制,?+1=0,所以11111111 11111111表示成十進位制就是-1
C語言整數的取值範圍
整數是我們生活中常用的資料型別,也是程式設計中常用的一種資料,c語言使用int關鍵字來定義整數變數 int是 integer 的簡寫 在定義變數的時候,可以加signed unsigned short和long四種修飾符。signed 有符號的,可以表示正數和負數。unsigned 無符號的,只能表...
C語言整數的取值範圍
整數是我們生活中常用的資料型別,也是程式設計中常用的一種資料,c語言使用int關鍵字來定義整數變數 int是 integer 的簡寫 在定義變數的時候,可以加signed unsigned short和long四種修飾符。signed 有符號的,可以表示正數和負數。unsigned 無符號的,只能表...
怎麼理解符號整數的取值範圍 C
之前我們討論到了整數有區分符號的,也就是有正負數之分。乙個典型的整數,如char。有符號和沒有符號,取值範圍是不一樣的 1.有符號的char 取值範圍為 128 127 2.無符號的char 取值範圍為0 255 首先看無符號的 1.為什麼最小為0 0000 0000 當然是0 2.為什麼最大是25...