国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

C語言中整形在計算機中的存儲

2019-11-11 06:47:01
字體:
供稿:網(wǎng)友

整形包括字符、短整形、整形、長整形,整形的存儲方式都是一樣的,整形在存儲時都是以補碼進行存儲的。

下面用char來解釋:

 

signed char          -128 到127

unsigned char        0 到 255

short int            -32768 到32797

unsigned short int     0 到65535

 

 

Char

Char類型其實也是一種整形,因為char的每個字符都是由0到255的整形數(shù)字來表示的;

ANSI C提供了char、signed char和unsigned char三種字符類型;

它們都是按照一個字節(jié)存儲的,可以保存256個不同的值;

unsigned char無符號的整形存儲簡單,因為正整數(shù)的原反補碼相等,范圍是0到255,直接存入相應(yīng)的二進制。

 

signed char 的取值范圍在-128到+127,為什么在這個范圍呢?

計算機在存儲數(shù)據(jù)都是以數(shù)據(jù)的補碼來進行存儲,有符號類型存儲是,最高被當(dāng)做符號位,0正1負,所以signed char取值范圍在

-(2^7)-1到+(2^7)-1,但是發(fā)現(xiàn)這個值是-127到+127,這是因為+0和-0被計算了兩次,但實際情況0只有一個,計算機一般把+0當(dāng)做零,把-0當(dāng)做-128,所以signed char 的取值范圍是-128到+127;

這里計算機是怎樣把-0識別為-128?

因為系統(tǒng)識別到最高位是1后面全0的情況,系統(tǒng)會在最高位自動添加一個符號位,所以-128具有9個bit位

-128在存入內(nèi)存的時,因為char只有8個bit位,所以讀取低8位,結(jié)果是1000 0000;

與-0的二進制序列一樣,所以就用-128表示-0;系統(tǒng)識別1000 0000 時就會自動添加一個符號位,就是-128了。(在這里計算時符號位參與運算)

原碼    1 1000 0000

反碼    1 0111 1111

補碼    1 1000 0000

 

下面看幾個有關(guān)理解整形存儲的代碼:

#include<stdio.h>#include<windows.h>int main(){	unsigned char a = -1;	signed char b= -1;	char c = -1;	PRintf("a=%d b=%d c=%d/n", a, b,c);	system("pause");	return 0;}

signed char型提升為int型打印時,char補碼的符號位前面要全補成和char相同的符號位,然后在把最高位當(dāng)做符號位,求原碼。

#include<stdio.h>#include<windows.h>int main(){	char a = 128;	char b = -128;	printf("a = %u/nb = %u/n", a,b);	system("pause");	return 0;}

不論是128 還是-128保存到cahr a里面都是讀取補碼的低8位即1000 0000;

在a解釋用于打印的時候會把最高位(第八位)作為符號位即1,所以char 提升為unsigned int類型,char的符號位前面的根據(jù)char類型全補成1。 然后以無符號整形輸出。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 竹溪县| 防城港市| 尼木县| 鄂尔多斯市| 衡山县| 合山市| 祁连县| 阿尔山市| 榆中县| 鄂托克前旗| 天全县| 伽师县| 锡林郭勒盟| 双峰县| 祁东县| 天镇县| 聂荣县| 宣武区| 澄江县| 福建省| 泉州市| 西峡县| 合作市| 崇义县| 西乡县| 襄汾县| 岱山县| 大渡口区| 岳普湖县| 剑阁县| 东至县| 北宁市| 嘉黎县| 陇西县| 金塔县| 湾仔区| 祁连县| 册亨县| 乳源| 苍梧县| 怀柔区|