c語言整數變數型別的取值範圍是什麼意思?像short int

2021-12-23 19:16:45 字數 2622 閱讀 2068

1樓:匿名使用者

取值範圍和編譯器有關

沒記錯的話最早的turbo c裡int才是-32768~32767的取值範圍,現在因為機器牛x了一次能處理的位數就增多了使得原來的int變成了現在的short int

扯遠了。。下面說明這個範圍是怎麼來的

既然討論計算機 就不能不提二進位制

計算機處理和記錄資料用的都是二進位制 這裡也一樣

short int 可以叫做「有符號短整數」 (對比unsigned short int 「無符號短整數」)

在計算機記憶體中一般是用2個位元組(2byte, 16bit)來儲存的(這個各個編譯器可能不同,c下是2byte)

16bit也就是16位,每位上可以放0或1

又因為是有符號,所以最高位被定義為符號位,且用補碼形式儲存在記憶體中

正數的補碼就是原碼,負數的補碼為原碼的符號位外各位取反+1

因此正數能表示的範圍就是0000000000000000~0111111111111111也就是+0~+32767(+0~+2^15-1)

負數能表示的範圍是1000000000000000~1000000000000001也就是-0~-32767(-0~-2^15+1)

又-0的1000000000000000取補後為(1)0000000000000000和+0一樣故被定義為最小值-32768

所以short int的取值範圍是-32768~32767 (-2^15~2^15-1)

也是為什麼你算32767+1的時候會直接變成-32768,

因為0111111111111111+1 = 1000000000000000即-32768的補碼

同理如果是int有符號整數的情況下,因為int一般採用4byte(32bit)儲存(turbo c是2byte),若用原碼儲存則取值範圍本該是 -2^32+1~2^32-1 由於有符號為解決正負0問題實際用補碼儲存,-0的補碼被定義為最小值-2^32 因此int的取值範圍是-2^32~2^32-1

同理無符號短整數(unsigned short int)的情況下,和有符號短整數一樣一般用2byte(16bit)儲存,但因為是無符號故不考慮補碼儲存問題也不考慮符號位,全部16bit都作為資料位來使用,所以最小值理所當然是0000000000000000,即0;最大值為1111111111111111,即2^16-1=65535,故unsigned short int 的取值範圍是0~65535。

其它型別以此類推,只要知道編譯器怎麼定義它在記憶體中的儲存容量就可以計算它的取值範圍

浮點型資料型別的取值範圍計算稍微麻煩點,有興趣的話可以深入研究一下。

你定義x=100,要看x是用於幹什麼的,如果只是為了記錄100這個數字只要符合條件用什麼型別都可以,但如果要做某種運算就要依照運算結果來選擇合適的資料型別

比如說x可能會變成負數,那麼就必須使用有符號的資料型別,如果x可能會變的超過65535 就要考慮用短整型以外的資料型別,如果x會變成天文數字恐怕什麼資料型別都不能使用因而必須自己創造屬於自己的資料型別(高精度計算什麼的)。。

2樓:

整型變數取值範圍是指你定義了一個變數short int x;那麼這個x的值不能超出

-32768-32767的範圍,你比如說x=32767;x=x+1;那麼x就等於-32768

3樓:金色潛鳥

c語言 整型, 有若干種。

不同種的型別,變數的取值各有一個範圍,就是說,無論你賦值給它,或運算中它獲得數值,不能超出這種型別的 最大值和最小值 規定的 值。

這些值等於幾,你可以檢視你的編譯器帶的標頭檔案

我的ms vc++ 6.0 規定了

#define mb_len_max 2

#define shrt_min (-32768) // short int 最小

#define shrt_max 32767 // short int 最大

#define ushrt_max 0xffff // unsigned short int 最小

#define int_min (-2147483647 - 1) // int 最小

#define int_max 2147483647 // int 最大

#define uint_max 0xffffffff // unsigned int 最大

#define long_min (-2147483647l - 1) // long int 最小

#define long_max 2147483647l //long int 最大

#define ulong_max 0xfffffffful //unsigned long int 最大

此外 還有 64 位 的。。。這裡 從略。

c語言,變數要先宣告,後使用,就是因為不同型別的數的允許範圍不同,不同型別的數的運算算方法不同。

4樓:

你的理解也不能說完全不對。

但是你的理解方式有問題。

對於x=100,你說是哪個型別你搞不清楚。

但是在編寫程式時,你要首先定義x的型別才能給它賦值。

所以,你的想法反了。不是有這個值判斷他是什麼型別而是由它是什麼型別,判斷他的取值是否正確

c語言如何限制變數範圍,C語言如何限制變數範圍?

每個整數都在 10 5 10 5之間,即 100000 100000之間,這裡最大的數是10000,變換成16進位制就是186a0,資料佔用3個位元組 最壞情況下1000個100000相加等於100000000,即16進位制5f5e100,佔用4個位元組 最高位空閒,可用於符號位 假設pc機是32位...

C判斷變數是否為整數型別的函式是

可以設定textbox的keypress方法 只允許使用者輸入數字 private void textbox1 keypress object sender,keypresseventargs e 再判斷txtbox1.text.length 0 就表示有數字輸入了 可以放心的int.parse 了...

c語言中能不能將整數賦給指標變數

系統記憶體使用是作業系統規定的,如果你希望直接操作記憶體,就必須瞭解系統的記憶體的分配情況,否則造成的損失可能是致命的。你的舉例是不完整的,如果說 point 1 100是非法的,完整語句應該是int point 1 100,之所以非法是因為100不是使用者可以操控的記憶體區域。p 1之所以數合法的...