关于 C++中 -0和0的思考(包括变量内存的查看)

背景

【C++ 程序】 牛顿迭代法求一元二次方程的解(包括复数解)中,本来会有输出-0的情况,如下图:
Output
为什么会输出-0呢?我进行了一些思考。

试验程序

#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
	int a1 = 0, b1 = 1;
	int A1 = -0, B1 = -1;
	double a2 = 0, b2 = 1;
	double A2 = -0, B2 = -1;
	cout << "a1,A1 = " << a1 << "," << A1 << endl;
	cout << "a2,A2 = " << a2 << "," << A2 << endl;
	if (a1 == A1) cout << "a1 == A1" << endl;
	else cout << "a1 != A1" << endl;
	if (a2 == A2) cout << "a2 == A2" << endl;
	else cout << "a2 != A2" << endl;
	cout << "a1/b1 = " << a1 / b1 << endl;
	cout << "A1/B1 = " << A1 / B1 << endl;
	cout << "a2/b2 = " << a2 / b2 << endl;
	cout << "A2/B2 = " << A2 / B2 << endl;
	cout << "A2/b2 = " << A2 / b2 << endl;
	cout << "a2/B2 = " << a2 / B2 << endl;
	cout << "The address of a2 is " << &a2 << endl;
	cout << "The address of A2 is " << &A2 << endl;
	double result1 = A2 / B2;
	double result2 = A2 / b2;
	cout << "The address of result1 is " << &result1 << endl;
	cout << "The address of result2 is " << &result2 << endl;
	return 0;
}

并在第28行设置断点,调试(F5),查看内存(Memory):
Memory
(中文界面路径:调试->窗口->内存)

在 Address 中输入地址即可看到其内存(这是16进制下的内存表示),发现-0的表示果然就是第一位1,后面全是0。不过在判断中,-00相等。
在输出时,-00是不一样的。
关于编码,详见我的博客 【SEU程序设计课笔记】 04 - 2020/10/19 - Numbers in the computer - 进制/编码/孪生素数/sin(x)的泰勒展开中的编码部分。
Output
(这里可以修改查看的方式)
Adjust

总结

-00计算上基本无区别,但实际上在存储时的二进制代码是不一样的。这都和二进制运算有关。(电脑不会计算,只是某些操作恰好符合了运算规律)


ALL RIGHTS RESERVED © 2020 Teddy van Jerry
欢迎转载,转载请注明出处。


See also

Teddy van Jerry 的导航页

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值