在c++中,我們都知道各個資料型別的值都有各自所能表達的範圍,舉個例子來說吧,我們以整型變數int為例說明怎樣去計算資料型別的取值範圍:
我們假設int在vc++開發環境中占用兩個位元組的單元,這只是為了簡化過程的,事實上我們都知道它佔四個位元組的。
從二進位制的原碼說起:
如果以最高位為符號位,二進位制原碼最大為0111111111111111=2的15次方減1=32767
最小為1111111111111111=-2的15次方減1=-32767
此時0有兩種表示方法,即正0和負0:0000000000000000=1000000000000000=0
所以,二進位制原碼表示時,範圍是-32767~-0和0~32767,因為有兩個零的存在,所以不同的數值個數一共只有2的16次方減1個,比16位二進位制能夠提供的2的16次方個編碼少1個。
但是計算機中採用二進位制補碼儲存資料,即正數編碼不變,從0000000000000000到0111111111111111依舊表示0到32767,而負數需要把除符號位以後的部分取反加1,即-32767的補碼為1000000000000001。
到此,再來看原碼的正0和負0:0000000000000000和1000000000000000,補碼表示中,前者的補碼還是0000000000000000,後者經過非符號位取反加1後,同樣變成了0000000000000000,也就是正0和負0在補碼系統中的編碼是一樣的。但是,我們知道,16位二進位制數可以表示2的16次方個編碼,而在補碼中零的編碼只有乙個,也就是補碼中會比原碼多乙個編碼出來,這個編碼就是1000000000000000,因為任何乙個原碼都不可能在轉成補碼時變成1000000000000000。所以,人為規定1000000000000000這個補碼編碼為-32768。
所以,在計算機系統中,int範圍是-32768~32767。
原文:
C 各個資料型別
c 目前分為兩種整型,一種無符號整型一種有符號整型。有符號整形 資料型別 占用空間 取值範圍 short 占用2位元組 2 15 2 15 1 int占用4位元組 2 31 2 31 1 long windows下占用4位元組,linux下4位元組 32位 8位元組 64位 2 31 2 31 1 ...
Redis的各個資料型別操作
string 最簡單的字串型別鍵值對快取,也是最基本的 keys 檢視所有的key 不建議在生產上使用,有效能影響 type key key的型別 get set del 查詢 設定 刪除 set rekey data 設定已經存在的key,會覆蓋 setnx rekey data 設定已經存在的k...
C 中各資料型別取值範圍
1.字元型別 型別 名稱位元組數 範圍signed char 有符號字元型 1 128 127 unsigned char 無符號字元型 10 255 2.整數型別 型別名稱 位元組數範圍 signed int 有符號整型 4 2147483648 2147483647 unsigned int 無...