int的取值範圍及補碼概念

2021-10-19 11:25:29 字數 1120 閱讀 3690

在計算機當中資料都是以01二進位制形式儲存的,而整型變數int佔的是4個位元組,乙個位元組8位,也就是32位,所以乙個整型變數在計算機當中其實可以用32位的二進位制來表示。

比如1這個整型變數,用二進位制可以表示為(int是帶符號的整型變數,所以以下第一位代表符號位,)

0000 0000 | 0000 0000 | 0000 0000 | 0000 0001 這就是正數1的原碼(每8位為乙個位元組所以正好佔4個位元組) 注:正整數用原碼表示,負整數用補碼表示。

所以正整數在記憶體中的32位最大可以表示為

0111 1111 | 1111 1111 | 1111 1111 | 1111 1111 也就是2^31-1=2147483647 因為是正整數,所以第一位符號位是0;從1開始所以要減去全0這種情況。

同理-1這個負的整型變數在記憶體中用二進位制可以表示為

1000 0000 | 0000 0000 | 0000 0000 | 0000 0001 這就是負數-1的原碼,但是負整數在計算機中是用補碼表示的,所以要把這個原碼轉化成補碼,補碼就是原碼除符號位之外取反後加1。

1111 1111 | 1111 1111 | 1111 1111 | 1111 1110 這就是-1的反碼,再對反碼加1

1111 1111 | 1111 1111 | 1111 1111 | 1111 1111 這就是負數-1的補碼了

那麼負整數在記憶體中的32位最大可以表示為

1111 1111 | 1111 1111 | 1111 1111 | 1111 1111 這個是最大負整數的原碼了,也就是-(2^31-1)=-2147483647那麼為什麼範圍是-2147483648開始呢???

1000 0000 | 0000 0000 | 0000 0000 | 0000 0001 這個是最大負整數對應的補碼了,那麼還有一種情況沒有包含進去,就是當補碼是全0的情況,也就是-0這種情況,在二進位制中0可以表示為-0和+0這兩種情況,但是0只有乙個,所以取-0這種情況,

當這個最小負整數的補碼除符號位外全是0的時候,就是-0的原碼了,所以-0是最小的那個數,也就是-2147483648,但其實這個數在記憶體中並不存在原碼,這個補碼也不是真正的補碼,真正的補碼是

1 1000 0000 | 0000 0000 | 0000 0000 | 0000 0000 已經溢位了

int 取值範圍

參考 目錄原碼 最高位為符號位 0表示正,1表示負 反碼 對於乙個帶符號的數來說,正數的反碼與其原碼相同,負數的反碼為其原碼除符號位以外的各位取反 補碼 正數的補碼與其原碼相同,負數的補碼為其反碼在最低為加1 計算機中採用補碼形式儲存資料,0的補碼表示只有一種 c 中int佔4個位元組,32位 最大...

C語言int的取值範圍

c語言int的取值範圍 我們常常看到int取值範圍為 32768 32767,實際上int的取值範圍依賴於計算機系統,在16位機器中,int佔16位,其中一位為符號位,所以取值範圍為前面所說的 32768 32767 而在32位和64位機器中,int佔32位,取值範圍為 2147483648 214...

MySQL建立無符號整數(int)及取值範圍

官方幫助 integer types exact value integer,int,smallint,tinyint,mediumint,bigint 整數型別又稱數值型資料,數值型資料型別主要用來儲存數字。mysql 提供了多種數值型資料型別,不同的資料型別提供不同的取值範圍,可以儲存的值範圍越...