c語言基本資料型別所佔的位數
1. short 至少16位
2. int 至少與 short 一樣長
3. long 至少 32 位,且至少與 int 一樣長
4. long long 至少64位,且至少與 long 一樣長 (此型別為 C++11 新增,舊的編譯器可能不支援)
2.一般而言,short型別為半個機器字(word)長,int型別為一個機器字長,而long型別為一個或兩個機器字長(在32位機器中,long型別和int型別的字長通常是相同的),所以它們的表示範圍不同。
3.short 的最小表示範圍和 int 一樣,都是-32767 到 32767 。也就是 -(2^15 - 1)到(2^15 - 1)。其中,2^15表示 2 的 15 次方。類似地,2 的 20 次方記作2^20 ,以此類推。注意:C 語言中 2^15 並不表示 2 的 15 次方,為了書寫方便,我們姑且這麼表示。
long 的最小取值範圍是 -2147483647 到 2147483647 。也就是 -(2^31 - 1) 到 (2^31 - 1) 。unsigned short的最小表示範圍和unsigned int 一樣,都是 0 到 65535(2^16 - 1)。unsigned long 的最小取值範圍是 0 到 4294967295(2^32 - 1)。
long long的最小取值範圍是 -9223372036854775807(-(2^63 - 1))到 9223372036854775807(2^63 - 1);unsigned long long 是 0 到 18446744073709551615(2^64 - 1)。
目前,long long 一般 64 位,long 是 32 位,short 是 16 位,而 int 或者 16 位,或者 32 位。具體某個編譯器到底使用多少位來表示這些型別。
4.float與double的範圍和精度
1. 範圍
float和double的範圍是由指數的位數來決定的。
float的指數位有8位,而double的指數位有11位,分佈如下:
float:
1bit(符號位) 8bits(指數位) 23bits(尾數位)
double:
1bit(符號位) 11bits(指數位) 52bits(尾數位)
於是,float的指數範圍為-127~+128,而double的指數範圍為-1023~+1024,並且指數位是按補碼的形式來劃分的。
其中負指數決定了浮點數所能表達的絕對值最小的非零數;而正指數決定了浮點數所能表達的絕對值最大的數,也即決定了浮點數的取值範圍。
float的範圍為-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的範圍為-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
2. 精度
float和double的精度是由尾數的位數來決定的。浮點數在記憶體中是按科學計數法來儲存的,其整數部分始終是一個隱含著的“1”,由於它是不變的,故不能對精度造成影響。
float:2^23 = 8388608,一共七位,這意味著最多能有7位有效數字,但絕對能保證的為6位,也即float的精度為6~7位有效數字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度為15~16位。
-----------------------------我是分割線----------------------------------------------------------
下面舉例看下4.5在計算機中儲存的具體資料:
Address+0 Address+1 Address+2 Address+3
Contents 0x40 0x90 0x00 0x00 接下來我們驗證下上面的資料表示的到底是不是4.5,從而也看下它的轉換過程。
由於浮點數不是以直接格式儲存,他有幾部分組成,所以要轉換浮點數,首先要把各部分的值分離出來。
Address+0 Address+1 Address+2 Address+3
格式 SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
二進位制 01000000 10010000 00000000 00000000
16進位制 40 90 00 00
可見:
S: 為0,是個正數。
E:為 10000001 轉為10進製為129,129-127=2,即實際指數部分為2。
M:為 00100000000000000000000。 這裡,在底數左邊省略儲存了一個1,使用 實際底數表示為 1.00100000000000000000000
到此,我們吧三個部分的值都拎出來了,現在,我們通過指數部分E的值來調整底數部分M的值。調整方法為:如果指數E為負數,底數的小數點向左移,如果指數E為正數,底數的小數點向右移。小數點移動的位數由指數E的絕對值決定。
這裡,E為正2,使用向右移2為即得:
100.100000000000000000000
至次,這個結果就是4.5的二進位制浮點數,將他換算成10進位制數就看到4.5了,如何轉換,看下面:
小數點左邊的100 表示為 (1 × 22) + (0 × 21) + (0 × 20), 其結果為 4。
小數點右邊的 .100… 表示為 (1 × 2-1) + (0 × 2-2) + (0 × 2-3) + ... ,其結果為.5 。
以上二值的和為4.5, 由於S 為0,使用為正數,即4.5 。
所以,16進位制 0x40900000 是浮點數 4.5 。
上面是如何將計算機儲存中的二進位制數如何轉換成實際浮點數,下面看下如何將一浮點數裝換成計算機儲存格式中的二進位制數。
舉例將17.625換算成 float型。
首先,將17.625換算成二進位制位:10001.101 ( 0.625 = 0.5+0.125, 0.5即 1/2, 0.125即 1/8 如果不會將小數部分轉換成二進位制,請參考其他書籍。) 再將 10001.101 向右移,直到小數點前只剩一位 成了 1.0001101 x 2的4次方(因為右移了4位)。此時 我們的底數M和指數E就出來了:
底數部分M,因為小數點前必為1,所以IEEE規定只記錄小數點後的就好,所以此處底數為 0001101 。
指數部分E,實際為4,但須加上127,固為131,即二進位制數 10000011
符號部分S,由於是正數,所以S為0.
綜上所述,17.625的 float 儲存格式就是:
0 10000011 00011010000000000000000
轉換成16進位制:0x41 8D 00 00
-----------------------------------------------------我是分割線-------------------------------------
int,long int,short int的寬度都可能隨編譯器而異。但有幾條鐵定的原則(ANSI/ISO制訂的):
-
sizeof(short int)<=sizeof(int)
-
sizeof(int)<=sizeof(long int)
-
short int至少應為16位(2位元組)
-
long int至少應為32位。
下面給出不同位數編譯器下的基本資料型別所佔的位元組數:
16位編譯器
char :1個位元組
char*(即指標變數): 2個位元組
short int : 2個位元組
int: 2個位元組
unsigned int : 2個位元組
float: 4個位元組
double: 8個位元組
long: 4個位元組
long long: 8個位元組
unsigned long: 4個位元組
32位編譯器
char :1個位元組
char*(即指標變數): 4個位元組(32位的定址空間是2^32, 即32個bit,也就是4個位元組。同理64位編譯器)
short int : 2個位元組
int: 4個位元組
unsigned int : 4個位元組
float: 4個位元組
double: 8個位元組
long: 4個位元組
long long: 8個位元組
unsigned long: 4個位元組
64位編譯器
char*(即指標變數): 8個位元組
short int : 2個位元組
int: 4個位元組
unsigned int : 4個位元組
float: 4個位元組
double: 8個位元組
long: 8個位元組
long long: 8個位元組
unsigned long: 8個位元組
相關推薦
c語言基本資料型別所佔的位數
1.C++的short、int、long和long long型別通過使用不同數目的位來儲存值,最多能夠表示4中不同的整數寬度。C++提供了一種靈活的標準,它確保了最小長度(從C語言借鑑而來),如下: 1. short 至少16位 2. int 至少與 short 一樣長 3
基本資料型別所佔的位元組數【C/C++】
1. 儲存容量單位 計算機以“位”序列儲存資料,每一“位”儲存0或1。這裡的“位”便是儲存資訊的一個單位:bit。 位元組:Byte 。1 Byte= 8bits 字:“字”由若干個位元組構成,字的位數叫做字長,字
c語言常用資料型別所佔用的位元組數
一、資料型別所佔用位元組數與機器字長與編譯器有關,遵循的幾條規律如下: sizeof(short int )<=sizeof(int) sizeof(int)<=sizeof(long int) short int 至少應為16位(2個位元組) long in 至少應為32位(
5. C語言基本資料型別及構造資料型別,浮點型儲存規則及記憶體模型
其實學習C語言的時候有一件很頭疼的事就是各種各樣的資料型別,不同的場合不同的用途不同的資料要使用不同的資料型別,那又為什麼要分出這麼多種型別呢,因為型別決定了開闢空間的大小,開闢空間的大小又決定了儲存的範圍。今天,就資料型別這個問題我們來掰扯掰扯。 C
java之基本資料型別所佔的位元組數
byte 1位元組 short 2位元組 char 2位元組(C語言中是1位元組)可以儲存一個漢字 int 4位元組 long 8位元組
C語言基本資料型別short、int、long、char、float、double
1.概述 C 語言包含的資料型別如下圖所示2.各種資料型別介紹2.1整型 整形包括短整型、整形和長整形。2.1.1短整形 short a=1;2.1.2整形 一般佔4個位元組(32位),最高位代表符號,0表示正數,1表示負數,取值範圍是-2147483648~2147
iOS基本資料型別所佔記憶體大小
1、在swift中基本的資料型別都有哪些? Float、CGFloat、Double、float_t、Float32、Float64、Float80、double_t Int、int_fast8_t
java基本資料型別所佔位元組數
JAVA基本資料型別所佔位元組數是多少?(32位系統) byte 1位元組 short 2位元組 int 4位元組 long 8位元組 char
C語言基本資料型別簡介
1.概述 C 語言包含的資料型別如下圖所示: 2.各種資料型別介紹 2.1整型 整形包括短整型、整形和長整形。 2.1.1短整形 short a=1; 2.1.2整形 一般佔4個位元組(32位),最高位代表符號,0表示正數,1表示負數,取值範圍是-2147483648~2147483647
C語言基本資料型別
一,整型 char short int long 、long long(C99新加入),再與unsigned搭配,共有10種類型 c,八進位制和十六進位制的整數常量(無負數) 234u,234, 在C語言中預設的數字為十進位制。如果在一個數字前面
Java八種基本資料型別所佔位元組
資料型別 位元組數 byte 1位元組 short 2位元組 char 2位元組(C語言中是1位元組) float 4位元組 int 4位元組
c語言中各型別所佔位元組大小
32位編譯器 char :1個位元組 char*(即指標變數): 4個位元組(32位的定址空間是2^32, 即32個bit,也就是4個位元組。同理64位編譯器) short int : 2個位元組 int: 4個位元組 unsigned int : 4個位元組 float:
C語言基本資料型別對應位元組大小及printf函式輸出格式
補充說明:4位元組:int(%d),unsigned=unsigned int(%u),long=long int(%ld),unsigned long(%lu),float(%f)8位元組:double(%lf),unsigned long long(%llu),long
C語言程式設計入門之--第四章C語言基本資料型別
導讀:C語言程式中經常涉及一些數學計算,所以要熟悉其基本的資料型別。資料型別學習起來比較枯燥,不過結合之前的記憶體概念,以及本節的位元組概念,相信資料型別也就不難理解了。本章從二進位制的基本概念開始,然後介紹機器語言通用的計算單位位元組,最後再介紹C語言中基本的資料型別及其基本概念。 &
Dev-C++下基本型別所佔位數和取值範圍:
符號屬性 長度屬性 基本型 所佔位數 取值範圍 輸入符舉例 輸出符舉例 -- -- char 8 -2^7 ~ 2^7-1 %c
[C/C++]C++下基本型別所佔位數和取值範圍
C++下基本型別所佔位數和取值範圍:符號屬性 長度屬性 基本型 所佔位數 取值範圍 輸入符舉例 輸出符舉例-- -- char 8
C語言資料型別所佔位元組數
char :1個位元組 unsigned char :1個位元組 char*(即指標變數): 4個位元組(32位的定址空間是2^32, 即32個bit,也就是4個位元組。同理64位編譯器) short : 2個位元組 unsigned short : 2個位元組 int: 4個位元組 unsigned in
C/C++中基本資料型別在不同系統中所佔空間大小
關於這個基本的問題,很早以前就很清楚了,C標準中並沒有具體給出規定那個基本型別應該是多少位元組數,而且這個也與機器、OS、編譯器有關,比如同樣是在32bits的作業系統系,VC++的編譯器下int型別
Object c/swift,java,c/c++在32位和64位各個平臺上基本資料型別 所佔有的位元組數
現在很多app和伺服器互動,雙方收到對方收據,怎麼才能完整解析訊息,是大家都會遇到的問題。現在來看以下他們的位元組長度差異。 iOS 64位編譯器,對應64位系統,包含機型(iphone5s—同時執行32位應用和64位應用,iphone6, iphone6
java 各基本資料型別 所佔有的位元組數
Int: 4 位元組 Short: 2位元組 Long: 8位元組 Byte: 1位元組 Character: 2位元組 Float: 4位元組 Double: 8位元組 Boolean:系統沒有提供Size方法; public class Ca