問(wèn)題
編譯運(yùn)行環(huán)境
Visual C++ 6.0 检痰,Windows 10
測(cè)試代碼
#include <stdio.h>
int main()
{
short si = -32768;
unsigned short usi = si;
int i = si;
unsigned int ui = usi;
//int a = 15;
printf("變量類(lèi)型 \t\t占用字節(jié)\n");
printf("short\t\t\t%lu \n", sizeof(short));
printf("unsigned short\t\t%lu \n", sizeof(unsigned short));
printf("int \t\t\t%lu \n", sizeof(int));
printf("unsigned int\t\t%lu \n", sizeof(unsigned int));
printf("\n\n");
printf("變量\t真值\t\t十六進(jìn)制值\n");
printf("si\t%d\t\t%x\n",si,si);
printf("usi\t%d\t\t%x\n",usi,usi);
printf("i\t%d\t\t%x\n",i,i);
printf("ui\t%d\t\t%x\n",ui,ui);
//printf("a\t%x\t\t%x\n",a,a);
return 0;
}
結(jié)果
結(jié)果分析
1、首先程序是32位的Windows程序苇经,所以我們先打印出對(duì)應(yīng)的基本數(shù)據(jù)類(lèi)型所占的字節(jié)赘理。可以看到short為2字節(jié)(16位)扇单,int為4字節(jié)(32位)商模。
2、然后si的真值為-32768 對(duì)應(yīng)的機(jī)器數(shù)補(bǔ)碼為1000 0000 0000 0000B即8000H蜘澜,%x的意思是把數(shù)據(jù)進(jìn)行16進(jìn)制的輸出(32位格式)施流。所以我們看到最后的結(jié)果是ffff8000,這里的輸出結(jié)果進(jìn)行了數(shù)位擴(kuò)展(符號(hào)擴(kuò)展鄙信,原值沒(méi)有進(jìn)行擴(kuò)展)的操作:
1000 0000 0000 0000
擴(kuò)展后的值為
1111 1111 1111 1111 1000 0000 0000 0000
打印出來(lái)就是ffff8000H瞪醋。3、usi直接接收了si的機(jī)器值1000 0000 0000 0000B装诡,unsigned short 沒(méi)有符號(hào)位银受,所以打印的值位32768。16進(jìn)制值就是8000慎王,省略了前面的4個(gè)0蚓土。
4宏侍、i的類(lèi)型為int,是4個(gè)字節(jié)赖淤,接收si的機(jī)器值1000 0000 0000 0000B后直接進(jìn)行符號(hào)擴(kuò)展的操作,然后機(jī)器數(shù)的值為:1111 1111 1111 1111 1000 0000 0000 0000B 谅河,對(duì)應(yīng)16進(jìn)制為ffff8000H咱旱,真值為-32768确丢。
5、經(jīng)過(guò)上面的一番分析后吐限,ui就比較簡(jiǎn)單了鲜侥,ui的機(jī)器數(shù)的值為:0000 0000 0000 0000 1000 0000 0000 0000B ,對(duì)應(yīng)16進(jìn)制的值為8000H诸典,真值為32768描函。
擴(kuò)展閱讀
- C語(yǔ)言數(shù)據(jù)類(lèi)型http://www.runoob.com/cprogramming/c-data-types.html