【C++】 - 基本数据类型及其所占字节长度

18 篇文章 0 订阅

记录以方便查阅。

1、基本数据类型所占字节长度

32位机器和64位机器字节最大的不同就是long类型指针类型长度不一样。

2、整型

2.1、32位系统下整型数据的取值范围

数据类型有符号无符号
char-128 ~ 127                            (-2^7 ~ 2^7-1)0 ~ 255              (0 ~ 2^8-1)
short-32768 ~ 32767                    (-2^15 ~ 2^15-1)0 ~ 65535          (0 ~ 2^16-1)
int-2147483648 ~ 2147483647(-2^31 ~ 2^31 -1)0 ~ 4294967295(0 ~ 2^32-1)
long long-2^63 ~ 2^63-10 ~ 2^64-1

2.2、整型的二进制表示方式

要搞清楚整型的二进制表示方式,需要搞明白 原码、反码、补码的概念:

原码:用符号位和数值表示带符号数,正数的符号位用“0”表示,负数的符号位用“1”表示,数值部分用二进制形式表示:

           比如,int型变量 3、-3的 原码 表示如下:

3(int)0000 0000 | 0000 0000 | 0000 0000 | 0000 0011
-3(int)1000 0000 | 0000 0000 | 0000 0000 | 0000 0011

反码:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反。

           比如,int型变量 3、-3的 反码 表示如下:

3(int)0000 0000 | 0000 0000 | 0000 0000 | 0000 0011
-3(int)1111 1111 | 1111 1111 | 1111 1111 | 1111 1100

补码:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反(即反码),然后在最后一位加1

          比如,int型变量 3、-3的 补码 表示如下:

3(int)0000 0000 | 0000 0000 | 0000 0000 | 0000 0011
-3(int)1111 1111 | 1111 1111 | 1111 1111 | 1111 1101

在大部分机器中,整型正数是以原码的形式保存在内存中,整型负数是以补码的形式保存在内存中。所以:

整型二进制十六进制
30000 0000 | 0000 0000 | 0000 0000 | 0000 00110x00000003
-31111 1111 | 1111 1111 | 1111 1111 | 1111 11010xFFFFFFFD

比如,有以下代码:

则在内存中px指向的内存为:;py指向的内存为:

 因为我用的vs2012是以小端模式存储的,即低位存在低地址,高位存在高地址(比如0x03是低位,且存在了低地址处)。所以实际上表示的就是0x00000003、0xFFFFFFFD(大端模式)。

其中,有几个特殊数值的二进制表示方式:

char 类型 -128 的二进制表示为 1000 0000

short 类型 -32768 的二进制表示为 1000 0000 0000 0000

int 类型的-2147483648的二进制表示为 1000 0000 0000 0000 0000 0000 0000 0000

之所以采用上述方式的原因,可以参考:浅析为什么char类型的范围是 —128~+127_为什么补码的范围是-128到127-CSDN博客

3、浮点型

3.1、float类型在内存中的存储方式

关于float类型在内存中的存储方式可参考文章:int转float时精度损失问题,这篇文章中说明了float类型是如何在内存中存储的,以及解释了为什么int转float类型会出现精度损失的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值