首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于字符转换.很怪的有关问题

2012-03-05 
关于字符转换...很怪的问题unsignedcharqq0x85//为10000101charcqqqq//这里一个问题1?输出应该是85,85

关于字符转换...很怪的问题
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 被赋值成一个负数的原因

热点排行