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

首頁 > 學院 > 開發設計 > 正文

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

2019-11-14 08:50:42
字體:
來源:轉載
供稿:網友

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

下面用char來解釋:

 

signed char          -128 到127

unsigned char        0 到 255

short int            -32768 到32797

unsigned short int     0 到65535

 

 

Char

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

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

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

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

 

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

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

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

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

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

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

與-0的二進制序列一樣,所以就用-128表示-0;系統識別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的符號位前面的根據char類型全補成1。 然后以無符號整形輸出。


上一篇:裝箱問題

下一篇:1035. 插入與歸并(25)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 托克逊县| 定结县| 朝阳市| 景宁| 南宫市| 巴塘县| 车致| 大关县| 淮滨县| 安多县| 辰溪县| 神木县| 泗洪县| 宁都县| 新密市| 五指山市| 扶绥县| 天等县| 安西县| 余庆县| 乐昌市| 图们市| 逊克县| 乌兰县| 磐安县| 陆川县| 改则县| 巴中市| 大兴区| 襄垣县| 怀化市| 湖口县| 烟台市| 当阳市| 平阴县| 墨江| 吉安县| 沂源县| 乐平市| 玛沁县| 阿巴嘎旗|