C语言1怎么算,1怎么算C语言中x=x&lt?

59f62c0d5424d7f73adddf37ae9ca1dc.png

2010-12-19

C语言整形数值范围问题短整形如果

有符号二进制数的表示是这样的:如果计算机的字长为n位,n位二进制数的最高位为符号位。其余n-1位为数值位,采用补码表示法时,可表示的数X的范围是 -2的(n-1)次幂 <= X <= 2的(n-1)次幂-1。 如果字长是16位,补码表示的范围就是 -2的15次幂 <= X <= 2的15次幂-1,也即可表示的范围是-32768到32767。

计算机中二进制表示有原码、反码、补码表示。

原码是指将最高位作为符号位(0表示正,1表示负),其它数字位代表数值本身的绝对值的数字表示方式。

反码表示规则为:如果是正数,则表示方法和原码一样;如果是负数,则保留符号位1,然后将这个数字的原码按照每...全部

有符号二进制数的表示是这样的:如果计算机的字长为n位,n位二进制数的最高位为符号位。其余n-1位为数值位,采用补码表示法时,可表示的数X的范围是 -2的(n-1)次幂 <= X <= 2的(n-1)次幂-1。

如果字长是16位,补码表示的范围就是 -2的15次幂 <= X <= 2的15次幂-1,也即可表示的范围是-32768到32767。

计算机中二进制表示有原码、反码、补码表示。

原码是指将最高位作为符号位(0表示正,1表示负),其它数字位代表数值本身的绝对值的数字表示方式。

反码表示规则为:如果是正数,则表示方法和原码一样;如果是负数,则保留符号位1,然后将这个数字的原码按照每位取反,则得到这个数字的反码表示形式。

补码是计算机表示数据的一般方式,其规则为:如果是正数,则表示方法和原码一样;如果是负数,则将数字的反码加上1(相当于将原码数值位取反然后在最低位加1)。

所以正数的原码、反码、补码是相同的,32767二进制原码表示是0 111 1111 1111 1111,所以反码、补码表示都是0 111 1111 1111 1111;

由原码定义可知十进制负数-32768在16位计算机中是表示不出来的,1111 1111 1111 1111表示的是-32767,但我们知道32768的原码是1 000 0000 0000 0000,其反码是0 111 1111 1111 1111,补码是1 000 0000 0000 0000,由补码定义可知恰好表示-32768。

两个有符号数进行加减运算时,如果运算结果超过可表示的有符号数的范围时,就会发生溢出,使计算机结果出错。很显然,溢出只能出现在两个同号数相加或两个异号数相减的情况。所以两正数相加,结果超出了范围,形式上变成了负数;两负数相加,结果超出了范围,形式上变成了正数(减法其实就是两个负数相加)。

-1用补码表示是1111 1111 1111 1111,即1000 0000 0000 0000 + 1111 1111 1111 1111时最高位有进位输出时,发生了溢出,形成了0111 1111 1111 1111,这就是有符号十进制数32767的二进制表示法,结果当然是32767了。

。收起

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值