c++的数据类型以及其间转换

C++基本数据类型、表示与字长

布尔型bool:1byte

短整型short:2byte

整型int:4byte

长整型long:4byte

字符型char:1byte

单精度浮点型float:4byte

双精度浮点型double:8byte

其中除布尔型与浮点型外,其他数据类型均有有符号与无符号两种,字长相同。

数据是以补码的形式存储的,符号位0正1负

float 1个bit用来存储浮点数的符号,8个bit用来存储浮点数的指数,23个bit用来存储浮点数的尾数。对于double 1个bit用来存储浮点数的符号,11个bit用来存储浮点数的指数,52个bit用来存储尾数。

指数位:指数位既要能够表示出来正的指数同时也要能够表示出来负的指数。在设计上,为了存储,在实际的指数上加了一个偏移(bias)。对于IEEE 单精度的float为例,这个值是127。这样对于指数位为0,实际在指数位中存储的是127.对于指数位中存储的是200的指数,实际存储的是73(200-127)。

尾数:对于一个10进制的浮点数转化为科学计数法的2进制的形式都可以表示为1.f*,其中f表示的是二进制的尾数,例如3.5可以表示为1.11*。在存储上只需要存储f既可以,因为小数点前面永远都是1,这样可以省下来一个bit。

不同数据类型之间转换

数据范围由小到大:

byte – short – char
– int – long --float –double

从小范围类型->大范围的数据类型为数据类型提升,及在赋值或运算中自动从小范围类型变成大范围类型,如:

int a = 300;

float b;

b = a;

在这里插入图片描述

从大范围类型->小范围类型为强制类型转换,会损失精度,也有可能溢出

溢出的例子如下:

int c = 0x11fff;

short d = (int)c;

最终d的值为1fff,可见溢出时只取了低两个字节

精度损失是比如在运算中用到了double型但是赋值给int型,则将损失小数点后的数据。损失精度时是直接舍弃高精度数据的。

移位操作

左移:<<

按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

右移:>>

如果最高位是0,右移空的位就填入0;如果最高位是1,右移空的位置就填入1(右移n位相当于将这个数除以2的n次方)

无符号右移:>>>

无论最高位是0还是1,左侧被移空的高位都填入0

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值