C語言中的有符號數與無符號數

2021-06-23 05:15:58 字數 3865 閱讀 4344

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 最高位為符號位不必考慮 ...