您的位置:首页 > 编程语言 > C语言/C++

C++基本数据类型直接的转换

2012-08-03 16:57 393 查看
1、unsigned int转换为int(内容不变,但是要分正负号)

unsigned int a = 65535; //11111111 11111111 11111111 11111111(原码)

int b=a; //b = -1 //10000000 0000000000000000 00000001(补码)

2、int、long转换为char(低八位发生截断存放到char)

int i=289; // 00000000 00000001 0010 0001

char c=i; // 0010 0001 ----- 33

long int转换为int(原封不动存放到int)

3、char转换为int

char类型转换为无符号int类型,char的八位直接存放到int低位存储单元,高位直接补0

char a = -1; //11111111 11111111

unsigned int b=a; //00000000 00000000 11111111 11111111

char类型转换为有符号int类型,char的八位直接存放到int低位存储单元,高位进行符号扩展

char a = -1; //11111111 11111111

int b = a; //11111111 11111111 11111111 11111111 ---- -1

4、浮点数存储

符号位
阶码(指数位) 尾数(小数位) 指数偏移量

单精度浮点数 1位[31] 8位 [30-23] 23位 [22-00] 127

双精度浮点数 1 位[63] 11 位[62-52] 52 位[51-00] 1023

例:float型浮点数125.5转化成32位二进制浮点数

125.5的二进制码为1111101.1,

写成二进制的科学计数为:1.111101*2^6(因为科学计数法“整数”部分大于1,在二进制中,“整数”部分只能恒为1)即向左移6位;

则e=6,则E=e+127=133,而E的二进制码为10000101,而1.111101把“整数”部分去除1之后为111101,之后补0,共23b,形成了阶码。

所以125.5的32位二进制浮点数为 0 1000010111110100000000000000000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: