c语言中0的补码,-0和+0在内存里怎样存储?或者说0的补码是什么?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

我们都知道,数值在内存里都是以补码形式存储的。正数的原反补都一样,负数的补码等于原码的反码加1.但对于0来说,它有符号位吗?     以一个8位的系统来说,有符号数的二进制为(1000 0000),表示的是-0,还是-128呢?   看看负数补码的公式:负数的补码=1 0000 0000(模)- 数的绝对值      比如:-1: 1111 1111 =1 0000 0000 - 0000 0001     -2: 1111 1110 =1 0000 0000 - 0000 0010   假设1:表示-0。   那么 -0的补码: 1 0000 0000 - 0 =0000 0000    反码: 1111 1111   (0000 0000 -1 = 0000 0000 +1111 1111=1111 1111)    原码: 1000 0000(反码取反)

假设2:表示-128。   -128的补码: 1 0000 0000 - 1000 0000(+128没有符号位)= 1000 0000   反码: 1111 1111   (1000 0000 -1 =1 000 0000 + 1111 1111 = 1111 1111)(补码-1)   原码: 1000 0000(反码取反)

从上面看来,一个原码对应了2个补码。按照C语言的定义,在32位的系统里,int表示的范围为-2^31 ~ +(2^31-1),那么可以推论出有符号数可以表示负的最大值,而没有-0的定义。也就是说上面1000 0000 表示的应该是-128,而不是-0。   对于一般的程序来说,+0和-0是没有区别的。但在高等数学里,+0和-0应该是有区别,表述不同的意义。如果在一些运算求解高等数学的程序里,没有-0会带来bug吗?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值