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

首頁 > 學院 > 開發(fā)設計 > 正文

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

2019-11-11 06:08:21
字體:
來源:轉載
供稿:網(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,直接存入相應的二進制。

 

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

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

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

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

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

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

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

原碼    1 1000 0000

反碼    1 0111 1111

補碼    1 1000 0000

 

下面看幾個有關理解整形存儲的代碼:

#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相同的符號位,然后在把最高位當做符號位,求原碼。

#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ā)表
主站蜘蛛池模板: 高碑店市| 会昌县| 县级市| 沭阳县| 河池市| 镶黄旗| 图们市| 织金县| 孝义市| 肇庆市| 文山县| 宜良县| 丹东市| 镇江市| 蓬莱市| 信阳市| 镇远县| 郁南县| 长垣县| 洪雅县| 荔波县| 平果县| 汝州市| 嫩江县| 鄂尔多斯市| 罗田县| 贵溪市| 梁河县| 五莲县| 屯留县| 洛隆县| 嘉义县| 孟津县| 水富县| 金坛市| 浦北县| 广元市| 镇巴县| 云阳县| 灵山县| 甘南县|