打印

-0 和+0 在内存里面分别怎么存储

[复制链接]
3198|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
醉心369|  楼主 | 2014-2-13 10:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
menfiss| | 2014-2-13 11:00 | 只看该作者
零没有正负嘛?

使用特权

评论回复
板凳
zwk34| | 2014-2-13 11:05 | 只看该作者
这个问题太费神了

使用特权

评论回复
地板
soso| | 2014-2-13 11:10 | 只看该作者
是这样的,计算机里表示数字用的都是补码不是原码。想知道补码是啥可以去百度一下。零在计算机里就是0,不存在正负一说。0和正数的补码都等于原码,也就是平时说的2进制数。负数的补码是符号位置一的情况下,对原码求反,再加一得到的。经过这样的变换,负数和正数运算的时候可以直接做加法,不需要根据符号位决定是做加法还是做减法。减法也可以改变有符号数的符号位,然后直接做加法。这样CPU就不需要专门做减法的电路了。

使用特权

评论回复
5
大道至简| | 2014-2-14 10:30 | 只看该作者
管这个干嘛?直接写xxx=0就好了

使用特权

评论回复
6
赤铸| | 2014-2-14 11:16 | 只看该作者
若采用反码,对于8-bit数据类型,-0“应该”是10000000(1是符号位,表示负数),+0“应该”是00000000
但如果我偏要把+0存成10000000,结果还不是一样?
计算机是应用数学,数学上都没有区别的,计算机里怎么会有区别?
主流的采用补码的系统里,不存在不同的编码。

使用特权

评论回复
7
ayb_ice| | 2014-2-14 13:31 | 只看该作者
就是0,不存在正负,或者说只有正0

使用特权

评论回复
8
msblast| | 2014-2-14 14:03 | 只看该作者
以char类型为例
对于正数原码、反码以及补码是其本身
+0
原码 00000000
反码 00000000
补码 00000000

负数的原码是其本身,反码是对原码除符号位之外的各位取反,补码则是反码加1
-0
原码 10000000
反码 11111111
补码 1 00000000
因为char类型只有8位,所以放弃最高位。由此可见,在计算机存储系统中+0 及 -0 的补码是一致的。即采用补码的方法,可以将+0 及 -0 统一表示,否则需要将+0 和-0 区别对待,增加运算复杂度。

上面是以char为例,换成short和int等,原理是一样的。可以亲自动手加深印象。

使用特权

评论回复
9
yewuyi| | 2014-2-14 14:49 | 只看该作者
没必要的讨论,直接写成0X00

使用特权

评论回复
10
yanzhuangsongqi| | 2014-2-14 16:40 | 只看该作者
不存在正负零吧

使用特权

评论回复
11
一般首席| | 2015-7-31 11:27 | 只看该作者
msblast 发表于 2014-2-14 14:03
以char类型为例
对于正数原码、反码以及补码是其本身
+0

回答的不错

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

283

帖子

2

粉丝