首页 > 解决方案 > 当向下舍入的值不是 0 时,为什么这个浮点除法会产生零?

问题描述

我正在练习 C++,但我发现了一些问题:

#include <iostream>
#include <string>
using namespace std;

int main() {
    int a = 2;
    {
        cout << a;
        cout << "\n";
        float a = a / 2;
        cout << "a= a/2 = ";
        cout << a;

    }
    cout << "\n";
    a = 2;
    {
        cout << a;
        cout << "\n";
        float b = a / 2;
        cout << "b= a/2 = ";
        cout << b;

    }
}

这个回报:

2 
a= a/2 = 0 
2 
b= a/2 = 1

我想知道为什么 a = a/2 = 0 ?

谢谢

标签: c++

解决方案


这是一个微妙的错误。看看这段代码:

int a = 2;
{
    float a = a / 2;
}

在大括号之外,名称a指的是int a,顶部声明的整数。但是在大括号内,一旦到达float a声明的行,名称afloat a的是大括号内而不是int a大括号外。

这是一个问题,因为线

float a = a / 2;

意思是“创建一个名为a类型的新变量float。哦,它需要一个初始值。没关系!给它的值float a除以 2。” 看到这里的问题了吗?变量a正在根据自身进行初始化,因此a / 2计算的时间a尚未初始化并且结果未定义。

要解决此问题,只需提供float a一个新名称。


推荐阅读