c++整数类型
2016-12-21 23:21
162 查看
C++中提供的整数类型有三种:int、long、short,每种类型又分为有符号和无符号两种类型。有符号整数既可以表示非负整数,又可以表示负整数;但是,无符号整数不能表示负数,只能表示非负整数。
(一)无符号整数
在内存中,int整数通常占4字节,这里,我们假定int为32位,那么无符号整数表示的取值范围为0x00000000~0xFFFFFFFF,转换为十进制为0~4294967295。当无符号整数表示的整数小于32位的时候,不足的空间,在最高位补0。比如数字5对应的二进制位101,那么剩余的29位在最高位补0,填充后的结果为:00000000000000000000000000000101。在计算中,无符号整数表示的正整数范围是有符号整数的2倍。
(二)有符号整数
在有符号整数中,数据的最高位代表符号位,1为负号,0为正号,在计算中,有符号整数是以补码的形式来存放的。以int整数为例,当数据的位数不足32位的时候,先将该数转换为补码,然后扩展该数的符号位至第31位。比如,5的补码是0101,那么只需要将最高位的0向左不断扩展直至第31位,最终结果为:00000000000000000000000000000101;-5的补码为1011,那么
只需要将最高位的1向左扩展至第31位,最终结果为:11111111111111111111111111111011。
在32位整数中,有符号整数表示的非负整数范围为:0x00000000~0x7FFFFFFF;负数的表示区间为:0x80000000~0xFFFFFFFF。
在我们讨论的C/C++中,有符号整数都是以补码形式存放的,而且在几乎所有的编程语言中都是如此,因为计算机只会做加法,不会做减法,所以需要将减法转换为加法。
如设有符号数x,y,那么x-y的值会被转换为x(补)+(-y)(补);例如,(3-2)可转换成(3+(-2)),运算过程为:3的十六进制补码0x00000003加上(-2)的补码0xFFFFFFFE,从而得到0x100000001。由于存储范围为4字节大小,两数相加后产生了进位,超出了存储范围,超出的1将被舍弃。进位被舍弃后,结果为0x00000001。
(一)无符号整数
在内存中,int整数通常占4字节,这里,我们假定int为32位,那么无符号整数表示的取值范围为0x00000000~0xFFFFFFFF,转换为十进制为0~4294967295。当无符号整数表示的整数小于32位的时候,不足的空间,在最高位补0。比如数字5对应的二进制位101,那么剩余的29位在最高位补0,填充后的结果为:00000000000000000000000000000101。在计算中,无符号整数表示的正整数范围是有符号整数的2倍。
(二)有符号整数
在有符号整数中,数据的最高位代表符号位,1为负号,0为正号,在计算中,有符号整数是以补码的形式来存放的。以int整数为例,当数据的位数不足32位的时候,先将该数转换为补码,然后扩展该数的符号位至第31位。比如,5的补码是0101,那么只需要将最高位的0向左不断扩展直至第31位,最终结果为:00000000000000000000000000000101;-5的补码为1011,那么
只需要将最高位的1向左扩展至第31位,最终结果为:11111111111111111111111111111011。
在32位整数中,有符号整数表示的非负整数范围为:0x00000000~0x7FFFFFFF;负数的表示区间为:0x80000000~0xFFFFFFFF。
在我们讨论的C/C++中,有符号整数都是以补码形式存放的,而且在几乎所有的编程语言中都是如此,因为计算机只会做加法,不会做减法,所以需要将减法转换为加法。
如设有符号数x,y,那么x-y的值会被转换为x(补)+(-y)(补);例如,(3-2)可转换成(3+(-2)),运算过程为:3的十六进制补码0x00000003加上(-2)的补码0xFFFFFFFE,从而得到0x100000001。由于存储范围为4字节大小,两数相加后产生了进位,超出了存储范围,超出的1将被舍弃。进位被舍弃后,结果为0x00000001。
相关文章推荐
- C/C++中有关字长与平台无关的整数类型
- C/C++中有关字长与平台无关的整数类型
- C++中判断一个float类型数据是否为整数
- 类型的C++除了整数
- C++ 的整数类型及其输入输出
- C/C++中有关字长与平台无关的整数类型
- C/C++中有关字长与平台无关的整数类型
- C/C++中有关字长与平台无关的整数类型
- C++中检测整数类型的最大、最小值
- 跨平台C++整数类型 之一 固定宽度整数(boost和C++11)
- 利用C++模板特性计算各整数类型的最大最小值
- 跨平台C++整数类型 之一 固定宽度整数(boost和C++11)
- C++的64位整数 (C++的扩充类型)
- C++中平台无关整数类型的表示
- C/C++中有关字长与平台无关的整数类型
- C/C++中有关字长与平台无关的整数类型
- C++整数类型
- C++复习之无符号整数类型的回绕
- C++ 使用二进制读写整数类型
- 如何在 C/C++中使用64位整数类型