关于字符转换...很怪的问题
unsigned char qq = 0x85; //为1000 0101
char cqq = qq;
//这里一个问题1? 输出应该是85, 85呀 %c不是只有8位吗?
printf( "%x, %x \n ", qq, cqq);//结果是:85,ffffff85
unsigned int uuqq = qq;
unsigned int uiqq = cqq;
int iuqq = qq;
int iiqq = cqq;
//这里一个问题1? 输出应该是85, 85呀
printf( "%x, %x \n ", uuqq, uiqq);//结果是:85,ffffff85
//这里一个问题1? 输出应该是ffffff85, ffffff85呀
printf( "%x, %x \n ", iuqq, iiqq);//结果是:85,ffffff85
根据谭浩强的C课本....
不是说如果从1个字节的转到四个字节时,
如果四字节的为unsigned int时.那么前面3个字节全补0
如果四字节的为signed时.如果1字节的符号位为1的话,前面3个节全都补1
如果1字节的符号位为0的话,前面3个节全都补0
为什么我在程序运行的时候,会跟上面的有冲突?
问题1
问题2
问题3
谢谢
[解决办法]
//这里一个问题1? 输出应该是85, 85呀 %c不是只有8位吗?
这里char是有符号的 char的最大值是: 0x7F, 0x85被当成一个负数在处理, 所以这样
后面的两个问题都是因为cqq 被赋值成一个负数的原因