1. c語言支援所有整型資料型別的有符號和無符號運算,儘管c語言標準並沒有指定用哪種方式來表示有符號整數,但是幾乎所有的 機器都使用補碼。
2. c
語言中預設的整形資料是有符號的,並且允許無符號數和有符號數之間進行轉換。轉換的原則是底層的位保持不變。
3. 執行運算時,如果乙個運算數是有符號的而另乙個是無符號的,那麼
c語言會隱式的將有符號引數強制型別轉換為無符號數,並假 設這兩個數都是非負的。
4. 無符號數的編碼
假設乙個整數資料型別有w位。我們可以用x來表示整個向量。我們用乙個函式
考慮32位所能表示的值得範圍。
最小值為用位向量[00000000000000000000000000000000]表示,也就是整數值0;
最大值為用位向量[11111111111111111111111111111111]表示,也就是整數值 (2^32)-1=4294967295。
5. 有符號數編碼
最常見的有符號數的計算機表示方式就是補碼形式。
在補碼的定義中,將字的最高有效位解釋為負權。用函式
同樣考慮32位補碼所能表示的值得範圍。
能表示的最小值的位向量[10000000000000000000000000000000],其整數值為 -2^31= -2147483648
能表示的最大值的位向量[01111111111111111111111111111111],其整數值為 (2^31)-1= 2147483647
6. 有符號數的其他表示方法
反碼:
原碼,最高有效位是符號位,用來確定剩下的位應該取負權還是正權。
術語補碼源於這樣一種情況,對於非負數x,我們用(2^w)-x(這裡只有乙個2)來計算 -x 的w位表示。
術語反碼**於這樣乙個屬性,我們用[1111…1]-x來計算 -x 的反碼表示。
重要的數字
數
字長8
1632
64umax
2550x ff
65535
0x ffff
4294967295
0x ffffffff
18446744073709551615
0x ffffffffffffffff
tmin
-128
0x 80
-32768
0x 8000
-2147483648
0x 80000000
-9223372036854775808
0x 8000000000000000
tmax
1270x 7f
32767
0x 7fff
2147483647
0x 7fffffff
9223372036854775807
0x 7fffffffffffffff
-1
0x ff
0x ffff
0x ffffffff
0x ffffffffffffffff
0
0x 00
0x 0000
0x 00000000
0x 0000000000000000
c語言中數字資料型別的位元組數
c宣告
32位機器
64位機器
char1
1short int2
2int4
4long int4
8long long int8
8char *4
8float4
4double8
832位機器上c語言的整形資料型別的典型取值範圍(方括號中的文字是可選的)
c資料型別
最小值
最大值
char
-128
127unsigned char0
255short [int]
-32768
32767
unsigned short [int]0
65535
int
-2147483648
2147483647
unsigned [int]0
4294967295
long [int]
-2147483648
2147483647
unsigned long [int]0
4294967295
long long [int]
-9223372036854775808
9223372036854775807
unsigned long long [int]0
18446744073709551615
64位機器上c語言的整形資料型別的典型取值範圍(方括號中的文字是可選的)
c資料型別
最小值
最大值
char
-128
127unsigned char0
255short [int]
-32768
32767
unsigned short [int]0
65535
int
-2147483648
2147483647
unsigned [int]0
4294967295
long [int]
-9223372036854775808
9223372036854775807
unsigned long [int]0
18446744073709551615
long long [int]
-9223372036854775808
9223372036854775807
unsigned long long [int]0
18446744073709551615
有符號數與無符號數
關於有符號數和無符號數的一些重要知識點,包括它們在記憶體中的儲存方式 互相轉換 越界計算等。大家肯定都知道,對於有符號數,資料型別的最高位用於標示資料的符號,最高位為1表示負數,最高位為0表示正數,那麼今天我們主要就此討論乙個問題 在計算機內部具體是如何表示有符號數呢?在計算機內部是通過補碼的方式來...
無符號數與有符號數比較
2012 04 24 19 30 2555人閱讀收藏 舉報擴充套件 先出幾個題目,再解釋一下為什麼答案是那樣的。題目一 int a 1 unsigned int b 1 printf d a b 結果輸出 1 因為無符號數與有符號數比較時,要將有符號數轉化為無符號數,再來比較。a轉化為無符號數後就是...
無符號數與有符號數比較
1轉化為無符號數 65535 在計算機中負數是用補碼表示的,即反碼加1 正數直接用原碼表示 因為 1是負數就用補碼表示為 00000000 00000001 的反碼 11111111 11111110 1 即 11111111 11111111 轉換為十進位制數為65535 最高位為符號位不必考慮 ...