C++中有符号整数的取值范围

1 数据类型简介

在编写程序中,数据类型(data type)定义了使用存储空间的方式。通过定义数据类型,告诉编译器怎样创建一片特定的存储空间,以及怎样去操作这片存储空间。

C/C++中有四个基本的内置数据类型。char是用于存储字符的;int存储整数值;floatdouble存储浮点数值,其中float用于单精度浮点数,而double用于双精度浮点数。

2 说明符

说明符(specifier)用于改变在“1 数据类型简介”中介绍的4种基本内置数据类型的含义,并把它们扩展成一个更大的集合。有4个说明符:longshortsignedunsigned

2.1 longshort

longshort修改数据类型所占内存空间的大小。如short int int long int,其中short int2个字节,intlong int4个字节。

2.2 signedunsigned

signedunsigned说明符告诉编辑器怎样使用整数类型。unsigned数不保存符号,而signed是默认的,需要将数值的第一位作为符号位,0为正数,1为负数。

3 signed int的表示方式

3.1 正数的表示方式

2.2 signedunsigned”中提到,signed说明符是默认的,即

short a = 1;
此时,a 的类型是 signed short int ,其大小为 2 个字节,存储方式为 0000 0000 0000 0001 ;其中第一位 0 表示该值为正数。

3.2 负数的表示方式

short b = -1;
此时需要使用“补码”的方式进行存储。一个数的补码即为该数的反码加 1 ,而反码指的是对数值的每一位求反( 0 的反码是 1 1 的反码是 0 ),例如 1111 0001 的反码是 0000 1110 。所以,对于 -1 来说,首先将其变为带符号位的二进制值 1000 0000 0000 0001 ,接下来求该值的反码,需要注意的是在求反码时,符号位即第一位不需要改变,那么得到的结果是 1111 1111 1111 1110 ,最后对该值加 1 得到 -1 的补码为 1111 1111 1111 1111 ,即 b 的值是 0xFFFF

4 signed short int的取值范围

signed short int的最大值为正数的0111 1111 1111 1111,转换为十进制的值是32767,而-32767对应的值是1000 0000 0000 0001,那么比该值更小的值应该是1000 0000 0000 0000,但是没有负数对应的补码是1000 0000 0000 0000;因此人为规定-32768的值是1000 0000 0000 0000。所以signed short int的取值范围应该是-32768~32767

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值