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

[复制链接]
2522|10
 楼主| liguang02 发表于 2014-11-17 10:40 | 显示全部楼层 |阅读模式
十进制数 原码 反码 补码
+0 00000000 00000000 00000000
-0 10000000 11111111 00000000
还是会
-0 10000000 11111111 10000000
dirtwillfly 发表于 2014-11-17 11:13 | 显示全部楼层
0存储的时候都是一样的。我是这样理解的:-0和+0常见的就是仪表显示的时候,代表比0大还是小一个很微小的数
ayb_ice 发表于 2014-11-17 11:45 | 显示全部楼层
-0等于+0
yewuyi 发表于 2014-11-17 13:25 | 显示全部楼层
没有-0
airwill 发表于 2014-11-17 13:49 | 显示全部楼层
本帖最后由 airwill 于 2014-11-18 07:17 编辑

关于 -0 和 +0.
通常在整数 (int) 变量中, 数据采用补码形式, 那么 0 只对应一个值,没有正负的(或者就是正数, 因为符号位为0).
所以出现 -0 和 +0 的情况只是在浮点数中. 因为浮点数其实没有0, 只有无穷小, 我们的嵌入式编译器将能表示的最小的值当做0看待. 于是出现了  -0 和 +0 .
如果浮点变量的存储内存用 uint32 的方式看, +0 就是 0x00000000, -0 就是 0x80000000.

请看介绍帖:  https://bbs.21ic.com/icview-834852-1-1.html

评分

参与人数 1威望 +3 收起 理由
liguang02 + 3 很给力!

查看全部评分

ayb_ice 发表于 2014-11-17 14:07 | 显示全部楼层
airwill 发表于 2014-11-17 13:49
关于 -0 和 +0.
通常在整数 (int) 变量中, 数据采用补码形式, 那么 0 只对应一个值,没有正负的(或者就是正 ...

实际上
0x80000000代表负的最大,就是2147483648-1(2^31 - 1)
 楼主| liguang02 发表于 2014-11-17 14:50 | 显示全部楼层
ayb_ice 发表于 2014-11-17 14:07
实际上
0x80000000代表负的最大,就是2147483648-1(2^31 - 1)

我们知道在计算机系统中,数值一律用补码来表示(存储)。主要原因是使用补码,可
以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数
相加时,如果最高位(符号位)有进位,则进位被舍弃,
按照他的说法,
-0 10000000 11111111
11111111+1不是10000000么?这时候最高位有进位,舍弃所以还是 10000000还是不舍弃成为00000000?
那么 -1加-1是不是会变成
11111111加上11111111
结果为11111110还是01111110呢?
 楼主| liguang02 发表于 2014-11-17 15:07 | 显示全部楼层
liguang02 发表于 2014-11-17 14:50
我们知道在计算机系统中,数值一律用补码来表示(存储)。主要原因是使用补码,可
以将符号位和其它位统 ...

哦,好像最高位进位还是11111110
ayb_ice 发表于 2014-11-17 15:30 | 显示全部楼层
本帖最后由 ayb_ice 于 2014-11-17 15:31 编辑

错了一点

0x80000000就是负的最大,就是-(2^31)...,0x80就是负的128


xlsbz 发表于 2014-11-17 18:38 来自手机 | 显示全部楼层
楼主基础不扎实啊。正零,和负零都是0啊。这个上中学就知道
xlsbz 发表于 2014-11-17 18:39 来自手机 | 显示全部楼层
airwill 发表于 2014-11-17 13:49
关于 -0 和 +0.
通常在整数 (int) 变量中, 数据采用补码形式, 那么 0 只对应一个值,没有正负的(或者就是正 ...

长知识。没用过浮点数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

56

主题

307

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部