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

unsigned char 1110(e)0101(5) 转成 char 的有关问题

2013-09-11 
unsigned char 1110(e)0101(5) 转成 char 的问题unsigned char 1110(e)0101(5) 转成 char1(当符号位)110(6

unsigned char 1110(e)0101(5) 转成 char 的问题
unsigned char 1110(e)0101(5) 转成 char  1(当符号位)110(6)0101(5) 怎么不是 65 而且俩个十六进制数就能表示一个char ,怎么可能多处6个f 多出来3字节呢

#include "stdafx.h"

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

[解决办法]
1、强制类型转换并不会去改变数本身,所以不可能由e5变成65;
2、printf的%x会使得char提升到int类型,提升的时候会扩展符号位;
3、int是32位的,所以前面一共会扩展24个1位,这样是6个f。

引用:
unsigned char 1110(e)0101(5) 转成 char  1(当符号位)110(6)0101(5) 怎么不是 65 而且俩个十六进制数就能表示一个char ,怎么可能多处6个f 多出来3字节呢

#include "stdafx.h"

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

热点排行