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

原创 2017年09月30日 22:16:53

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

计算机中有符号整数“循环”

大家都知道计算机中整数都是以补码形式存放的,正数的补码是它本身,负数的补码是数值位取反,再加1。 计算机中int是4字节(16位二进制数),short是2字节(8位二进制数)。这里用5位二进制数做例...

C++ 中有符号类型到无符号类型的转换

为了更好地解释下面的代码,先来介绍一些背景知识,在我的计算机中, char 类型占 8 个比特位,那么, unsigned char 类型能表示的数的范围为 0 ~ 2的8次方 - 1,即 0 ~ ...

c++ 无符号bigint高精度大整数

此代码除了减法和乘法以外均参考了刘汝佳的《算法竞赛入门经典第二版》,亲测DevC++可以编译通过。代码在codevs( codevs.cn )上通过高精度全部题目。POWERED BY PHANTOM...

C++数据类型及取值范围

  • 2011-01-21 19:55
  • 29KB
  • 下载

整型数组处理算法(二)文件中有一组整数,要求排序后输出到另一个文件中

文件中有一组整数,要求排序后输出到另一个文件中, 一次读取一个sizeof(int),然后往一个int*数组里写入,写入的时候就比较,进行排序。 然后,在遍历数组,写到文件中。

hdu6055(计算几何)计算n个整数点中有多少个正方形

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6055题意: 有n个整数点,问这些点能组成多少个正多边形。加以推导,我们可以知道,只有是正方形时,才能...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)