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

2路bit-map的应用:test.txt中有42亿个无符号整数,从小到大打印其中只出现过一次的数 。限制: 可用内存为1.5GB.

先看这样一个问题:test.txt中有42亿个无符号整数,从小到大打印其中只出现过一次的数 。限制: 可用内存为1.5GB.           前面, 我们已经深入讨论了bit-map, 在本文中,...
  • stpeace
  • stpeace
  • 2015年06月28日 18:17
  • 1055

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

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

bit-map再显身手:test.txt中有42亿个无符号整数, 求文件中有多少不重复的数(重复的数算一个)。限制: 可用内存为600MB.

来看看这样一个问题:test.txt中有42亿个无符号整数, 求文件中有多少不重复的数(重复的数算一个)。限制: 可用内存为600MB.           思路很简单, 还是用bitmap, 无需多...
  • stpeace
  • stpeace
  • 2015年06月24日 23:13
  • 1195

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

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

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

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

8位有符号的取值范围是-128~+127

这是一个困惑了我几年的问题,它让我对现在的教科书和老师极其不满,从我N年前开始摸电脑时,就几乎在每一本C++教科书上都说,8位有符号的取值范围是-128~+127,为什么不是-127~+127呢,后来...
  • zam183
  • zam183
  • 2016年07月13日 16:52
  • 173

C++ 带符号和无符号char类型赋值超出表示范围的情况

在C++中字符型被分为了三种:char、signed char和unsigned char。需要的注意: 字符的表现形式只有两种:带符号的和无符号的,类型char具体使用哪一种由编译器决定;如果...
  • eastlhu
  • eastlhu
  • 2017年05月30日 11:35
  • 585

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

  • 2011年01月21日 19:55
  • 29KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++中有符号整数的取值范围
举报原因:
原因补充:

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