什么是截斷與提升?
簡單來說,截斷是將所占位元組大的元素賦給所占位元組小的元素時會出現數值的舍去現象;提升是將占位元組小的元素賦給占位元組大的元素時出現的補位現象,
舉個例子:
int val=1;//int占四個位元組
char ch;//char占一個位元組
ch=char(val);//將val賦給ch這個程序截斷
printf("%d ",ch);
//ch是char型別,輸出型別是%d(int),這個程序提升
注意:
1、影響截斷結果有兩個因素:
(1)兩個元素的型別
(2)計算機的存盤方式,是大端機還是小端機,
2、補位規則:
提升補高位,無符號數補0,有符號數補1,
不了解大端機和小端機的小伙伴可以戳以下鏈接學習
大端機和小端機如何區分
例題
分析以下代碼的輸出結果:
#include "stdio.h"
int main()
{
//原碼 10000000 00000000 00000000 00000001
//反碼 11111111 11111111 11111111 11111110
//補碼 11111111 11111111 11111111 11111111
char a=-1;
unsigned char b=-1;
//將int賦給char,a->11111111,b->11111111
printf("%d %d",a,b);
//因為無符號數補0,有符號數補1
//所以補位后a->11111111 11111111 11111111 11111111
// b->00000000 00000000 00000000 11111111
return 0;
}
運行結果:
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/238057.html
標籤:其他
上一篇:計算機導論
