int foo = bar <<'\ n';是什么?在C ++中意味着什么?

时间:2018-12-18 00:46:16

标签: c++

这是我不小心写的代码:

int bar = 5;
int foo = bar << '\n';
int cnt = 0;
for (int i = 0; i < foo; i++) {
    cnt++;
}
cout << cnt << '\n';

为什么cnt给出输出5120。我希望那是编译错误。

3 个答案:

答案 0 :(得分:5)

好吧,'\n'char,它只是数字的另一种类型,<<(尽管我们经常看到它以重载形式出现在流中)是头等重要的一个“左移”运算符,可以处理两个数字。

因此,您有数字bar(或5)和数字'\n'(或假设ASCII为10)。它们是二进制补码的样子:

0000 0000 00‭00 0101  (5)
       ^^ ^^^^ ^^^^
         ten bits

您将5左移10位,这给您...

‭0001 0100 0000 0000‬
       ^^ ^^^^ ^^^^
         ten bits

…或5120。

顺便说一句,您可以只打印foo的值,而不用循环构建cnt

当您看到someStream << '\n'并执行了完全不同的操作时,这是因为someStream重载运算符<<的类的实例在这种情况下的新含义。是的,这有点令人困惑。

答案 1 :(得分:1)

int foo = bar << '\n';

表示移动小节数值5,该数值位于二进制0101'\ n'位的左边。解释为int时,'\ n'为10。

答案 2 :(得分:1)

<<是整数的移位运算符。它将位向左移动。基本上,它乘以2 ^ x。

单引号中的\ n是一个字符。字符就像整数,可以在算术运算中使用。