[C語言]——整型的截斷與提升
阿新 • • 發佈:2020-12-21
技術標籤:c語言
什麼是截斷與提升?
簡單來說,截斷是將所佔位元組大的元素賦給所佔位元組小的元素時會出現數值的捨去現象;提升是將佔位元組小的元素賦給佔位元組大的元素時出現的補位現象。
舉個例子:
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;
}
執行結果: