作业帮 > 综合 > 作业

C语言中整型的问题.问①:“long 4字节(32位)取值范围-2的31次方~(2的31次方-1)”中,为什么要-2的“

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/10/03 05:58:26
C语言中整型的问题.

问①:“long 4字节(32位)取值范围-2的31次方~(2的31次方-1)”中,

为什么要-2的“31”次方,而不是“32”次方呢?

问②,“unsigned long  4字节(32位)取值范围0~(2的32次方-1)”中,

      为什么要2的“32”次方,而不是“31”次方呢?


①:“long 4字节(32位)取值范围-2的31次方~(2的31次方-1)”中,为什么要-2的“31”次方,而不是“32”次方呢?
答:因为负数的最高位是符号位,所以在计算范围的时候要将符号位去掉.所以负数据的取值是-2的31次方.
问②,“unsigned long 4字节(32位)取值范围0~(2的32次方-1)”中,为什么要2的“32”次方,而不是“31”次方呢?
答: 无符号整型是没有符号位的,但也不能表示负数,因为最高位的符号位只能表示数字,这样我们在计算范围时步需要考虑符号位.
但为什么是2的32资方-1而不是2的32资方呢.因为在计算无符号的范围时我们要将0这一个数据去掉,因为0是没意思的一个数,所以需要去掉. 其实你可以想像,为什么我们在建立数组时,定义的是10,但数据下标是从0开始,所以在实际运用数组时,数组的最大下标只能标识为9(即10-1),正是因为要将0去掉,所以在计算类型表示范围时也要将0去掉,这就需要-1.