A. c語言中,基本整形,取值范圍-32768到32767什麼意思
就是說如果你定義一個整型變數,數值為32768,那麼就會出現運行錯誤,因為你賦的數值超過了它本身的最大數值,最小也是一樣的意思
B. C語言基本整型的數據范圍什麼意思
基本整型變數,所佔位元組數為2,每個位元組等於八位二進制數,可以用0和1表示的八位二進制數,2個位元組也就是16位二進制。
最高位表示正負,所以用0和1組成的16位數字范圍為-2的15次方~2的15次方,也就是-32768~32767。因此基本整型變數數據范圍是-32768~32767。
位元組構成信息的一個小單位,並作為一個整體來參加操作,比字小,是構成字的單位。
在微型計算機中,通常用多少位元組來表示存儲器的存儲容量。
例如,在C++的數據類型表示中,通常char為1個位元組,int為4個位元組,double為8個位元組。
C. C語言int的取值范圍
C語言int的取值范圍在32/64位系統中都是32位,范圍為-2147483648~+2147483647,無符號情況下表示為0~4294967295。
C/C++編程語言中,int表示整型變數,是一種數據類型,用於定義一個整型變數,在不同編譯環境有不同的大小,不同編譯運行環境大小不同。
C的數據類型包括:整型、字元型、實型或浮點型(單精度和雙精度)、枚舉類型、數組類型、結構體類型、共用體類型、指針類型和空類型。
基本數據類型:
void:聲明函數無返回值或無參數,聲明無類型指針,顯示丟棄運算結果。(C89標准新增)
char:字元型類型數據,屬於整型數據的一種。(K&R時期引入)
int:整型數據,表示範圍通常為編譯器指定的內存位元組長。(K&R時期引入)
float:單精度浮點型數據,屬於浮點數據的一種。(K&R時期引入)
double:雙精度浮點型數據,屬於浮點數據的一種。(K&R時期引入)
_Bool:布爾型(C99標准新增)
_Complex:復數的基本類型(C99標准新增)
_Imaginary:虛數,與復數基本類型相似,沒有實部的純虛數(C99標准新增)
_Generic:提供重載的介面入口(C11標准新增)
(3)c語言整型位元組取值范圍理解擴展閱讀:
1989年,ANSI發布了第一個完整的C語言標准——ANSI X3.159—1989,簡稱「C89」,不過人們也習慣稱其為「ANSI C」。
C89在1990年被國際標准組織ISO(International Standard Organization)一字不改地採納,ISO官方給予的名稱為:ISO/IEC 9899,所以ISO/IEC9899: 1990也通常被簡稱為「C90」。
1999年,在做了一些必要的修正和完善後,ISO發布了新的C語言標准,命名為ISO/IEC 9899:1999,簡稱「C99」。
在2011年12月8日,ISO又正式發布了新的標准,稱為ISO/IEC9899: 2011,簡稱為「C11」。
D. C語言int的取值范圍
C語言int的取值范圍在32/64位系統中都是32位,范圍為-2147483648~+2147483647,無符號情況下表示為0~4294967295。
C/C++編程語言中,int表示整型變數,是一種數據類型,用於定義一個整型變數,在不同編譯環境有不同的大小,不同編譯運行環境大小不同。
C的數據類型包括:整型、字元型、實型或浮點型(單精度和雙精度)、枚舉類型、數組類型、結構體類型、共用體類型、指針類型和空類型。
基本數據類型:
void:聲明函數無返回值或無參數,聲明無類型指針,顯示丟棄運算結果。(C89標准新增)
char:字元型類型數據,屬於整型數據的一種。(K&R時期引入)
int:整型數據,表示範圍通常為編譯器指定的內存位元組長。(K&R時期引入)
float:單精度浮點型數據,屬於浮點數據的一種。(K&R時期引入)
double:雙精度浮點型數據,屬於浮點數據的一種。(K&R時期引入)
_Bool:布爾型(C99標准新增)
_Complex:復數的基本類型(C99標准新增)
_Imaginary:虛數,與復數基本類型相似,沒有實部的純虛數(C99標准新增)
_Generic:提供重載的介面入口(C11標准新增)
(4)c語言整型位元組取值范圍理解擴展閱讀:
1989年,ANSI發布了第一個完整的C語言標准——ANSI X3.159—1989,簡稱「C89」,不過人們也習慣稱其為「ANSI C」。
C89在1990年被國際標准組織ISO(International Standard Organization)一字不改地採納,ISO官方給予的名稱為:ISO/IEC 9899,所以ISO/IEC9899: 1990也通常被簡稱為「C90」。
1999年,在做了一些必要的修正和完善後,ISO發布了新的C語言標准,命名為ISO/IEC 9899:1999,簡稱「C99」。
在2011年12月8日,ISO又正式發布了新的標准,稱為ISO/IEC9899: 2011,簡稱為「C11」。
E. 為什麼C語言中有符號整型變數的取值范圍是-32768~32767,麻煩詳細解釋一下
答:有符號整型變數的取值范圍是-32768~32767,這是過去16位計算機的int類型整數的表示範圍,因為16位二進制可表示65536個十進制數據,如果表示無符號整數則其范圍為:0 到 65535,而要表示有符號的十進制數據,那麼最高位就是符號位,正數的范圍為:0 到 32767,其二進制數就是:0000 0000 0000 0000 到 0111 1111 1111 1111;負數的范圍為:-1 到 -32768,其二進制數就是:1111 1111 1111 1111 到 1000 0000 0000 0000 ,兩者所表示數據的個數恰好是65536個十進制數據。
F. C語言中數據類型所佔位元組數與它取值范圍的關系
C語言中的數據類型,簡單的可以分為整數類型和浮點數類型。所佔位元組數與取值范圍的關系實際上是整數編碼和浮點數編碼的問題,整數編碼的三種方式是原碼、反碼、補碼,很容易理解,浮點數的編碼格式使用的是IEEE754編碼。
1、整數編碼以字元類型為例。
字元類型佔1個位元組,共8位二進制bit位,因此排列組合數,有2^8 = 256種編碼的方法。如果表示無符號字元類型,那一般來說表示【0,255】這256個數。
如果表示有符號char類型,如果表示正數,那最高位符號為0,因此可表示的最正整數是:
0-111 1111 ,轉化成十進制就是127。同樣的道理,符號為1表示負數。最小的負數是
1-000 0000,轉化成十進制數就是-128,因此有符號char類型表示的范圍是[-128,127]。
一般來說,假設整型數據類型占的二進制位數n,如果表示無符號整數則取值范圍是[0,2^n-1],如果表示有符號整數,【-2^(n-1) , 2^(n-1) - 1] 。
2、浮點數類型
浮點數編碼一般採用的是IEEE754的編碼規則,這個編碼格式主要指出了浮點數有效數字、指數以及符號位所佔的二進制位數。簡單概括為:
格式 長度 符號位 指數位 尾數位 有效位數 指數偏移 尾數說明
單精度 32 1 8 23 24 127 有一位隱含位
雙精度 64 1 11 52 53 1023 有一位隱含位
擴展雙精度 80 1 15 64 64 16383 沒有隱含位
注意:擴展雙精度格式沒有隱含位,因此它的有效位數與尾數位數一致,而單精度和雙精度格式均有一位隱含位,因此它們的有效位數比尾數位數多1。
一般很少自己手動來算浮點數的取值范圍,可以使用如下程序來計算。
#include<stdio.h>
typedefstructFP_SINGLE
{
unsigned__int32fraction:23;
unsigned__int32exp:8;
unsigned__int32sign:1;
}fp_single;
typedefstructFP_DOUBLE
{
unsigned__int64fraction:52;
unsigned__int64exp:11;
unsigned__int64sign:1;
}fp_double;
typedefstructFP_EX_DOUBLE
{
unsigned__int64fraction;
unsigned__int32exp:15;
unsigned__int32sign:1;
}fp_ex_double;
intmain()
{
floatx;
fp_single*fp_s=(fp_single*)&x;
fp_s->sign=0;
fp_s->exp=0xfe;
fp_s->fraction=0x7fffff;
printf("float最大數:%le ",(double)x);
fp_s->sign=0;
fp_s->exp=0x1;
fp_s->fraction=0x0;
printf("float最小數:%le ",(double)x);
fp_s->sign=0;
fp_s->exp=0;
fp_s->fraction=0x1;
printf("float最小弱規范數:%le ",(double)x);
doubley;
fp_double*fp_d=(fp_double*)&y;
fp_d->sign=0;
fp_d->exp=0x7fe;
fp_d->fraction=0xfffffffffffff;
printf("double最大數:%le ",y);
fp_d->sign=0;
fp_d->exp=0x1;
fp_d->fraction=0x0;
printf("double最小數:%le ",y);
fp_d->sign=0;
fp_d->exp=0;
fp_d->fraction=0x1;
printf("double最小弱規范數:%le ",y);
charch[10];
fp_ex_double*fp_ex_d=(fp_ex_double*)ch;
fp_ex_d->sign=0;
fp_ex_d->exp=0x7ffe;
fp_ex_d->fraction=0xffffffffffffffff;
//不知道擴展雙精度浮點數如何輸出,
//不過可以用od跟蹤,然後找到ch[0]的地址,在數據窗口中選擇浮點80為長雙精度,
//就可以看到數值了。
fp_ex_d->sign=0;
fp_ex_d->exp=0x1;
fp_ex_d->fraction=0x8000000000000000;
fp_ex_d->sign=0;
fp_ex_d->exp=0;
fp_ex_d->fraction=0x1;
return0;
}
G. C語言中,unsigned int型數據的取值范圍是
0到65535。
舉例:
unsigned a;
a=5;
或:unsigned int a;
a=5;
16位系統中一個int能存儲的數據的范圍為-32768~32767,而unsigned int能存儲的數據范圍則是0~65535,在計算機中,整數是以補碼形式存放的。
系統使用
無符號數只表示大小,有符號數最高位(二進制情況下最高位表示符號位),在同一操作系統下,有符號數和無符號數的最大數值在大小上的關系是2*x+1。二者表示的數據范圍大小是相同的,但是范圍不同。
C支持所有整形數據類型的有符號數和無符號數運算。盡管C標准並沒有指定某種有符號數的表示,但是幾乎所有的機器都使用二進制補碼。
通常,大多數數字默認都是有符號的,C也允許無符號數和有符號數之間的轉換,轉換原則是基本的位表示保持不變。因此在一台二進制補碼機器上,當從無符號數轉換為有符號數時,效果就是應用U2Tw,而從有符號轉換為無符號數時,就是應用函數T2Uw,其中w表示數據類型的位數。
H. 為什麼C語言中的整型取值范圍是--32768~32767,是按什麼規則規定,推理的
整型的寬度是一個字,也就是2個位元組,16個二進制位,最高一位二進制位用來表示符號(正或負),那麼剩下的15位來表示數值。
01111111
11111111是32767,最大的正整數
00000000
00000001是1
00000000
00000000是0
11111111
11111111是-1(不是-32767)
10000000
00000001是-32767(不是-1)
10000000
00000000是-32768(不是-0),最小的負整數
計算機表示數主要從運算方式的一致性來考慮。
比如00000000
00000001表示1很好理解,但是11111111
11111111為什麼是-1呢?
按照二進制加法
11111111
11111111
+
00000000
00000001=
1
00000000
00000000
結果超出了整型的寬度,溢出部分被忽略,最後的計算機結果是00000000
00000000
那麼換成十進制,?+1=0,所以11111111
11111111表示成十進制就是-1