c语言变凉存储性,C语言数据的表示和存储(IEEE 754标准)
C語言的數據類型大體上分為整數和浮點數兩種類型。因為char和指針類型實際上都是整數類型。
移碼:給每一個數值加上一個偏置常數即可。通常是加上2^(n-1)或者是2^(n-1)-1這里的n通常取編碼的位數 ? ? (IEEE 754)
移碼通常用來表示浮點數的階,這樣便于浮點數加減運算時對階的操作。
機器數是指補碼,真值則是這個數原來的十進制形式。
變形補碼:補碼的符號位只有一位,容易溢出。所以便有了變形補碼,它的符號為有兩位,不會溢出。
正數的原碼=反碼=補碼
負數的反碼是對其原碼按位取反,補碼=反碼+1.
在C語言中整數又可分為無符號整數和帶符號整數兩類。即unsigned和signed。
無符號整數在機器中直接以二進制補碼的形式存放(因為正數的原碼=補碼,所以也可認為是原碼),現代的機器大多是從左到右對應于從高到低。例如8051就是這樣的。故C語言的無符號類型數的范圍如下:(32位下)
unsigned char (1字節) ? ? ? ? ? ? 0——255
unsigned int (4字節)? ? ? ? ? ?0——4294967296
unsigned short(2字節) ? ? ? ?0——65535
unsigned long(4字節) ? ? ? ? ?0——4294967296
帶符號整數在機器中也是以二進制補碼形式存放的, 最高位是符號位,其余是數值位。但是有個例外,2147483648他的補碼是這樣的?110000000000000000000000000000000 (33位數字),我們說最高位是符號位,所以反碼應該是?101111111111111111111111111111111(33位數字),只有這樣才保證沒有溢出,所以實際上計算機還是自動往前多讀了一位,否則就會解釋為0.
char ? ? ? ? ? -128——127
int ? ? ? ? ? ? ?-2147483647 - 1 —— 2147483647
long long ? ?-9223372036854775807- 1 ——9223372036854775807。
數字 2147483648 大于最大整數值 2147483647,而且-2147483648 分兩步解釋,首先2147483648是個無符號正數,由于它大于2147483647,所以類型被取為unsigned long。在VS上給unsigned類型不允許使用一元負運算符。故定義為-2147483647-1。這樣使得類型是int類型。
浮點數的表示不同于整數(整數是定點數)。表示起來很麻煩。float,double,long double。
第0位是符號位,0表示正數,1表示負數。階碼是由移碼表示的,故為2^7 = 128。故
最大正數應該表示為:0.?111111111111111111111111?×2^127=(1-2^-24)×2^127
最小正數應該表示為:0.?1000000000000000000000000?×2^-128=2^-129
最小負數應該表示為:-0.?111111111111111111111111?×2^127=-(1-2^-24)×2^127
最大負數應該表示為:-0.1000000000000000000000000×2^-128=-2^-129
0還是表示為0
用這種表示方式,使得可表示的數的范圍變得非常大。但是不是絕對精確的。而且早期的這個表示方式的規定不是統一的,直到IEEE 754制定,計算機中浮點數的表示才算統一了標準。該標準規定了整數部分為1(小數點前隱含了1),32位的階碼有8位(偏置常量是127),64位的階碼有11位(偏置常量是1023)。因為偏置常量是127,故實際的階碼應該是00000001——10000000.其中沒有包含00000000和11111111。所以0在IEEE 754中是這樣表示的。+0=00000000000000000000000000000000. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-0=10000000000000000000000000000000
所以0在該標準中有兩種表示方式。
規定了+∞和-∞。他們在IEEE 754標準中,表示如下:
+∞:?01111111100000000000000000000000?
-∞:??11111111100000000000000000000000?
至于為什么說float的精度是小數點后6——7位,這是因為上面的IEEE 754規定了32位下尾數最多有23位,即2^23 =?8388608,剛好是10進制的7位,最多7位,有些7位是不精致的,因為畢竟數值不是9999999,而是8388608.故教科書上寫的是6——7位。64位下階碼是11位,符號位是1位,所以尾數占據52位,即2^52 =?4503599627370496.這個數字有16位,當然由于不是9999999999999999,故教科書給的是15——16位。
本文同步分享在 博客“zy010101”(CSDN)。
如有侵權,請聯系 support@oschina.cn 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。
總結
以上是生活随笔為你收集整理的c语言变凉存储性,C语言数据的表示和存储(IEEE 754标准)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言实现连续几个bit位置1,【C语言
- 下一篇: android 自动补全方法,Andro