c语言怎么根据占用字节数验证数据类型的取值范围呢?

img


想问问各位这个推导是怎么弄出来的呢?比如unsigned占用4字节,32个比特位,为什么取值范围直接就可以2^32+1

对于无符号数,表示范围是0-2^n-1
对于有符号数,因为有一个符号,所以是-2^(n-1)  ~ 2^(n-1)-1
这个可以用4位整数给你举例,4位的表示范围排列组合就是0000 0001 0010 .... 1111,一共16个,如果表示没有符号,就是0-15,正好16个数字,也就是2^4-1,如果有符号,那么规定1000为-8 1001为-7 ... 1111为-1,0000为0,0001为1,... 0111为7,那么表示范围就是-8~7,因为0111+1就回到了-8了。所以是-2^(n-1)  ~ 2^(n-1)-1

我们知道1024=2^10,约等于1000,也就是约等于10^3,2^(10*5)约等于10^(3*5),因此2^52=4*2^50约等于4*10^15,那大致就是15位了。