首页 理论教育 整数类型及存储空间展示:有符号和无符号整型的区别

整数类型及存储空间展示:有符号和无符号整型的区别

时间:2023-08-20 理论教育 版权反馈
【摘要】:整数类型也分为有符号和无符号两种,可以通过声明signed int和unsigned int来区分。整型默认都是有符号的,int实际就代表着signed int。动手写3.1.1动手写3.1.1展示了在当前编译器下各个整型的存储空间。动手写3.1.3运行结果如图3.1.3所示:图3.1.3整型溢出初学者可能会觉得这样的输出结果非常奇怪。

整数类型及存储空间展示:有符号和无符号整型的区别

上文介绍的short、int和long int类型都是用来表示整数的整型。整数类型也分为有符号(signed)和无符号(unsigned)两种,可以通过声明signed int和unsigned int来区分。整型默认都是有符号的,int实际就代表着signed int。此外,unsigned关键字可以独立地作为unsigned int的缩写使用,语句“unsigned ui;”等价于“unsigned int ui;”。

有符号数可以表示正数和负数,数字的第一位表示符号,1为负,0为正,具体实现可以参考相关资料中关于补码的介绍。无符号数只能表示非负数,由于不需要第一位来区分正负,无符号数可以表示的正数范围会比有符号数多一倍,16位的有符号短整型short可以表示的最大正整数为32767,而16位的无符号短整型unsigned short可以表示的最大正整数为65535(二进制多一位可以表示的数就多一倍)。

动手写3.1.1

动手写3.1.1展示了在当前编译器下各个整型的存储空间。程序中的sizeof就是之前说的获取当前系统中某个数据类型的大小的方法。需要注意的是,这里sizeof返回的是类型的字节数,而不是位数。运行结果如图3.1.1所示:

图3.1.1 整型的存储空间

动手写3.1.2

动手写3.1.2展示了在当前编译器下各个整型的大小范围,这完全是由存储空间决定的。我们可以看到无符号数表示的数字范围大小其实跟有符号数一样,只是因为不能表示负数,所以能表示的正数范围扩大了一倍。此外,由于编译器算法的问题,int和long int的最小值不能直接赋值为-2147483648。运行结果如图3.1.2所示:(www.xing528.com)

图3.1.2 整型的范围

在动手写3.1.2中,我们都是将范围内的数字赋值给整型对象。接下来让我们看一看,如果把范围外的数字赋值给整型会发生什么。

动手写3.1.3

运行结果如图3.1.3所示:

图3.1.3 整型溢出

初学者可能会觉得这样的输出结果非常奇怪。这是由于超出范围的数值在赋值时发生了溢出,其中低于最小值的叫作下溢(Underflow),高于最大值的叫作上溢(Overflow)。向下溢出的值会回到最大值,而向上溢出的值会回到最小值。

提示

由于超出范围的数值会造成上溢或下溢,我们需要根据对数值大小的估计而选择范围合适的数据类型,以避免数值溢出。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈