作业帮 > 综合 > 作业

C语言数据类型的取值范围

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/10/04 03:04:51
C语言数据类型的取值范围
我们以V6.0编译器下面的short int 为例子.占2字节.16位.那么值域取值最大正数为
0111 1111 1111 1111 那么对应的十进制数为2^15-1.这个我能够理解.0就带表符号位嘛.不参与运算.
最大的负数取值我不能够理解了.我理解的是最大的负值取值范围是 1000 0000 0000 0000.这个是补码的话.最高位1是符号位吧.那么我们获取源码就要取反吧.1111 1111 1111 1111在加一个 1 为 1 1000 0000 0000 0000这样就有一个问题.不是16位吗?现在有17位了呀!我的16位本来就应该把符号位给放进去吧.那么这个范围是-32768 -32767是吗?还是说计算机运算的时候.正数就用原码进行运算.负数就用补码进行运算.计算机本身不需要进行转换.
取反后是 0111 1111 1111 1111,加1后还是 1000 0000 0000 0000.
举个便于理解补码的例子:一个时钟面,可以表示12个小时,无符号时可以表示0-11
如果要表示负数,6字代表-6点,7字代表-5点,能表示的范围是 -6 到 +5.
最大的负值的绝对值比最大正数大1.
这样符号为正的数字和符号为负的数字是一样多的.