为什么'std :: cout <<!+2'输出0?

时间:2018-08-06 02:55:05

标签: c++

这行代码输出0

std::cout << !+2;

我认为应该是35,因为'!'的ASCII码为33,并将2添加为35

为什么会这样?

2 个答案:

答案 0 :(得分:6)

让我们快速分析您的代码!+2的作用。裸感叹号是逻辑非运算符,它会否定其操作数的真值。诸如+2之类的整数可以转换为布尔值,其中0表示false,每个非零整数true。这意味着!+2将转换为!truetrue的取反显然是false,因此!+2被转换为false。当您将此管道中的布尔值传送到std::cout时,再次转换为整数,即true变成1,而false变成0。这就是为什么您std::cout << !+2;打印0的原因。

也可以实现您想做的事情(在ASCII码中加2!)。因此,您必须通过用单引号将字符!括起来来告诉编译器。然后,代码std::cout << ('!' + 2);将按预期打印35。我添加了一些额外的括号以不完全依赖运算符的优先级。

#include <iostream>

int main() {
    std::cout << ('!' + 2) << '\n';
}

输出:

35

Live on Wandbox

答案 1 :(得分:0)

如果要获取感叹号的ASCII值,则需要用单引号将其引起来,如下所示。

std::cout << '!' + 0;

您所做的是否定一个值(该值可以为True或False)。使值(在此为整数)为正或为负都没有关系(在这里您将2明确指定为正),因为除零以外的所有值都表示True。因此,如果对零执行相同的操作(如以下操作),则会得到 1 作为输出。

std::cout << !+0;