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

printf("%x\n"(char)s2); //ffffffe5 ?为啥会多处6个f? 而不是'\0'

2013-09-07 
printf(%x\n,(char)s2) //ffffffe5 ???为什么会多处6个f? 而不是'\0'#include stdafx.hint

printf("%x\n",(char)s2); //ffffffe5 ???为什么会多处6个f? 而不是'\0'
#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
unsigned char  s2 = 0xe5;
printf("%x\n",(char)s2); //ffffffe5 ???为什么会多处6个f? 而不是'\0'
return 0;
}

[解决办法]
1、无符号数扩充的时候,前面一律补0
2、有符号数扩充的时候,前面所补的数取决于原数的最高位,0xe5的最高位为1,所以补1
3、而int是32位的,所以相对于char需要补24个1,相当于十六进制的6个f

引用:
#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
unsigned char  s2 = 0xe5;
printf("%x\n",(char)s2); //ffffffe5 ???为什么会多处6个f? 而不是'\0'
return 0;
}

热点排行