c语言变量取值的上下线,c语言变量的取值范围

本文详细解释了二进制中的符号位和补码表示法,指出在有符号数中,最高位为1表示负数,且全1表示最大的负整数-1。通过补码的计算方式,解释了从-1到-128的二进制表示,并举例说明了不同字节数中-1的表示形式。强调了在编程中声明变量的有符号和无符号属性会影响其数值解释。
摘要由CSDN通过智能技术生成

2019-01-06 回答

有符号数,最高位用来表示符号位:0正1负。

最大的正整数:0111 1111(b) = 1*2^6 + 1*2^5 + 1*2^4 + 1*2^3 + 1*2^2 + 1*2^1 + 1*2^0 = 127,这个计算方法跟无符号整数最大值的计算方法一样。但在负数范围内,数值的计算方法不能直接使用 1*2^6 + 1*2^5的公式进行转换。

在计算机中,负数除最高位为1以外,采用补码的形式进行表达。所以在计算其值前,需要对补码进行还原。这里,先直观地看一眼补码的形式: 以我们原有的数学经验,在10进制中:1 表示正1,而加上负号:-1 表示和1相对的负值。那么,我们会很容易认为在2进制中(1个字节): 0000 0001 表示正1,则高位为1后:1000 0001应该表示-1。然而,事实上计算机中的规定有些相反,请看下表:

二进制值(单字节) 十进制值

1000 0000         -128

1000 0001         -127

1000 0010         -126

1000 0011         -125

…             …

1111 1110         -2

1111 1111         -1

首先我们看到,从-1到-128,其二进制的最高位都是1,正如我们前面的学。然后我们有些奇怪地发现,1000 0000 并没有拿来表示-0;而1000 0001也不是拿来直观地表示-1。事实上,-1 用1111 1111来表示。怎么理解这个问题呢?先得问一句是-1大还是-128大?当然是 -1 大。 -1是最大的负整数。以此对应,计算机中无论是字符类型,或者是整数类型,也无论这个整数是几个字节。它都用全1来表示 -1。比如一个字节的数值中:1111 1111表示-1,那麼,1111 1111 – 1 是什么呢?和现实中的计算结果完全一致。 1111 1111 – 1 = 1111 1110,而1111 1110就是-2。这样一直减下去,当减到只剩最高位用於表示符号的1以外,其它低位全为0时,就是最小的负值了,在一字节中,最小的负值是1000 0000,也就是-128。我们以-1为例,来看看不同字节数的整数中,如何表达-1这个数: 字节数二进制值十进制值单字节数1111 1111 -1 双字节数1111 1111 1111 1111 -1 四字节数1111 1111 1111 1111 1111 1111 1111 1111 -1   可能有同学这时会混了:为什么1111 1111 有时表示255,有时又表示-1?你自已决定一个数是有符号还是无符号的。写程序时,指定一个量是有符号的,那麼当这个量的二进制各位上都是1时,它表示的数就是-1;相反,如果事选声明这个量是无符号的,此时它表示的就是该量允许的最大值,对于一个字节的数来说,最大值就是255。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值