这行代码输出0
:
std::cout << !+2;
我认为应该是35
,因为'!'的ASCII码为33
,并将2
添加为35
。
为什么会这样?
答案 0 :(得分:6)
让我们快速分析您的代码!+2
的作用。裸感叹号是逻辑非运算符,它会否定其操作数的真值。诸如+2
之类的整数可以转换为布尔值,其中0
表示false
,每个非零整数true
。这意味着!+2
将转换为!true
。 true
的取反显然是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
答案 1 :(得分:0)
如果要获取感叹号的ASCII值,则需要用单引号将其引起来,如下所示。
std::cout << '!' + 0;
您所做的是否定一个值(该值可以为True或False)。使值(在此为整数)为正或为负都没有关系(在这里您将2明确指定为正),因为除零以外的所有值都表示True。因此,如果对零执行相同的操作(如以下操作),则会得到 1 作为输出。
std::cout << !+0;