C语⾔中短整型取值范围,以c语⾔中短整型(signedint)的取值范围为例说明各种数据类。。。
在开始我们的正⽂之前,你需要先了解⼀下原码、反码、补码这三个概念以及这三者之间的相互转换⽅式。
在有了⼀定的了解之后,我们开始我们的介绍。在本⽂中,我们以短整型为例,给⼤家介绍该类型的取值范围的计算⽅式,以及原理。
⾸先默认情况下,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。