以c语言中短整型(signed int)的取值范围为例说明各种数据类型取值范围的计算方式与原理

在开始我们的正文之前,你需要先了解一下原码、反码、补码这三个概念以及这三者之间的相互转换方式。
在有了一定的了解之后,我们开始我们的介绍。在本文中,我们以短整型为例,给大家介绍该类型的取值范围的计算方式,以及原理。
首先默认情况下,unsigned int 占用2个字节(跟具体的编译器和操作系统有关),也就是16位。
在计算机存储的数据中,都是用0和1表示的,并且是用补码表示的(很重要)。

在实际的存储过程中,我们规定表示负数的时候,最高位为符号位(负数的符号位为1),那么对于这个16位,我们能表示的最小的负数应当是这个样子的:1000 0000 0000 0000 ,我们在前面说过,在计算机中,是以补码形式存储的,所以但是在计算机中负数是用补码(原码符号位不变,其余位取反,然后加1)表示的,所以我们要把它转换成原码再和十进制转换。我们发现在转换成原码之后,依旧是1000 0000 0000 0000。
我们现在假想一个问题,如果我们有+0和-0这两种情况,我们用二进制该怎么表示呢?
对于+0,它应该是0000 0000 0000 0000;
对于-0,它应该是1000 0000 0000 0000。
但是无论+0还是-0,从数学的角度它都应该是0,但是在计算机的二进制存储中我们却发现-0的二进制竟然和16位二进制存储中的最小值(即前面提到的1000 0000 0000 0000)一样,但是0肯定不是这里的最小值啊,于是为了解决这个问题,我们规定,1000 0000 0000 0000表示16位中的最小值,即-32768。

表示正数时,最高位为符号位(正数的符号位为0),最大的正数为0111 1111 1111 1111 即2^15 - 1 = 32767。

所以16位的短整型所能表示的范围是-32768 - 32767。

猜你喜欢

转载自blog.csdn.net/lws123253/article/details/80227236
今日推荐