char 为8位一个字节表示的有符号数,将一个char转换为unsigned int 是又会发生什么呢?
看段代码:
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
char a=0xf1;
cout<<(int)a<<endl;
printf("%d\n",a);
cout<<(unsigned int)a<<endl;
printf("%u\n",a);
printf("%08x\n",a);
cout<<endl;
char apos=0x7f;
cout<<(int)apos<<endl;
printf("%d\n",apos);
cout<<(unsigned int)apos<<endl;
printf("%u\n",apos);
printf("%08x\n",apos);
cout<<endl;
unsigned char b=0xf1;
cout<<(int)b<<endl;
printf("%d\n",b);
cout<<(unsigned int)b<<endl;
printf("%u\n",b);
printf("%08x\n",b);
return 0;
}
-15
-15
4294967281
4294967281
fffffff1
127
127
127
127
0000007f
241
241
241
241
000000f1
这里有一个将占字节小的数据转换为一个占字节大的数据时的扩展问题。
比如这个占字节小的数据类型是char ,将其扩展为占字节大的数据时,首先会用原char数据的符号位进行扩展大字节多出来的位,比如如果char为负数,则用1来扩展占大字节的位,如果char为正数或0,则用0来扩展占字节大的数据的多出来的位。