原碼反碼補碼詳解
成都創(chuàng)新互聯(lián)公司是一家專注于成都網站設計、做網站與策劃設計,陽春網站建設哪家好?成都創(chuàng)新互聯(lián)公司做網站,專注于網站建設10余年,網設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:陽春等地區(qū)。陽春做網站價格咨詢:18982081108整型提升詳解
菜單//輸出什么?
#includeint main()
{char a= -1;
signed char b=-1;
unsigned char c=-1;
printf("a=%d,b=%d,c=%d",a,b,c);
return 0;
}
例題2://輸出什么
#includeint main()
{char a = -128;
printf("%u\n",a);
return 0;
}
例題3:#incluudeintmain()
{int i= -20;
unsigned int j = 10;
printf("%d\n", i+j);
}
例1 解析:#includeint main()
{char a = -1;//賦值運算是從右往左算,所以先寫出-1的原碼,在轉換成補碼,在發(fā)生截斷,最終才存儲到a當中。
//10000000000000000000000000000001 -1的原碼
//11111111111111111111111111111110 -1的反碼
//11111111111111111111111111111111 -1的補碼
//11111111 最終char是一個字節(jié),只能存儲8個比特位,所以要發(fā)生截斷,最終a的二進制如前面
signed char b = -1;
//11111111 b的最終二進制
unsigned char c = -1;
//0000000000000000000000000000001
//1111111111111111111111111111110 注意:無符號數(shù)按位取反時,直接0變 1,1變0.即可,因為所有位都是數(shù)據(jù)位
//1111111111111111111111111111111
//11111111 c的最終二進制
//注意,a,b,c雖然最終的二進制是一樣的,但最高位的1意義不一樣,a,b的最高位為符號位,c是數(shù)據(jù)位
printf("a=%d,b=%d,c=%d", a, b, c);//%d是以有符號的整型的原碼打印(它會看你整型提升后的最高位,并把它當做符號位,并且要進行原碼反碼補碼的轉換。),上述的所有char類型全部要發(fā)生整型提升
//11111111 a的二進制
//11111111111111111111111111111111 a整型提升后的補碼
//11111111111111111111111111111110 a的反碼
//10000000000000000000000000000001 a的原碼
//b也是這樣做
//c的二進制 11111111
//00000000000000000000000011111111 c整型提升后的補碼
//c整型提升后最高位為0,是正數(shù),原碼反碼補碼相同。
return 0;
}// 運行結果a=-1,b=-1,c=255
例2解析:#includeint main()
{char a = -128;
//10000000000000000000000010000000 -128的原碼
//11111111111111111111111101111111 -128的反碼
//11111111111111111111111110000000 -128的補碼
//10000000 a的二進制
printf("%u\n",a);//%u是打印無符號十進制數(shù)
//1111111111111111111111111000000 整型提升后a的二進制序列,(補碼)
//以%u形式打印,它會認為補碼最高位的1為數(shù)據(jù)位(直接當正數(shù)處理),所以a是正數(shù),原碼反碼補碼相同
return 0;
}//運行結果a=4294967168
例3解析:#includeint main()
{int i = -20;
//10000000000000000000000000010100 -20的原碼
//11111111111111111111111111101011 反碼
//11111111111111111111111111101100 補碼
unsigned int j = 10;
//00000000000000000000000000001010 正數(shù)的原碼反碼補碼相同
printf("%d\n", i + j);
//11111111111111111111111111101100 i的補碼
//00000000000000000000000000001010 j的補碼
//11111111111111111111111111110110 i+j的補碼
//11111111111111111111111111110101 i+j的反碼
//10000000000000000000000000001010 i+j的原碼
//在內存中用補碼計算,然后以原碼的形式打印
}
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
分享名稱:c語言數(shù)據(jù)存儲加深練習-創(chuàng)新互聯(lián)
標題URL:http://vcdvsql.cn/article34/jghse.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網站改版、微信小程序、網頁設計公司、網站營銷、電子商務
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容