作业帮 > 数学 > 作业

我认为char型变量的最小值应该是1111 1111,也就是-127,可是书上怎么都说其最小值是-128?

来源:学生作业帮 编辑:百度作业网作业帮 分类:数学作业 时间:2024/03/29 21:59:38
我认为char型变量的最小值应该是1111 1111,也就是-127,可是书上怎么都说其最小值是-128?
能详细解释一下吗?
1111 1111的补码为1000 0000.计算机中用补码存储数值,所以计算机中的-128就是1000 0000.而补码都是正数,1000 0000的值为128,那么1111 1111的绝对值为128,加负号就是-128.是这样的吗?
我认为char型变量的最小值应该是1111 1111,也就是-127,可是书上怎么都说其最小值是-128?
这个问题接近 C 语言的底层技术.
char 变量的值范围究竟取多少,视你所用的编译器而定,有的编译器 将 char 当作 unsigned char 来处理,也就是 无符号 char 型,它的取值范围是 0 - 255.
对于多数编译器而言(包括VC++),char 都视作 signed char来处理,这时 char 的取值范围得与 二进制编码技术有关,对于补码表示法.char 的取值范围是 -128 - 127,对于符号绝对值编码法、反码记法,char 的取值范围是 -127 - 127.
你书上所说的,应该是将 char 视作 signed char 并且采用 补码表示法 的编译器,char 的范围 是这样来的.
char 有 8 位,最高位是符号位,所以 char可以在 -127 - 127 取值是没有疑问了.
当最高位是 1,其余位都是 0 时,按照补码表示法的规则,这个数应该是 负数了,用求负数的二进制的方法反推回去:
二进制:1000 0000
减一:0111 1111
逐位取反:1000 0000 //和原来的二进制形式一样,对应正整数 128
经过这一系列操作之后,二进制形式依然是 1000 0000,对应 数值 128,但这个数是负数,因为反推前 最高位是 1 的,故对应 -128.
其他的整数类型 short 、int 、long 也可以这样推导.