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的反码是11的反码是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

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hou09tian/article/details/78145578
个人分类: C++基础
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭