不能(再次)为签名的短期分配正确的值

时间:2011-04-13 16:16:56

标签: c++

为什么这会将零作为输出?我怀疑有些编译器在工作,但为什么呢?

  signed int sint_ = numeric_limits<signed int>::min() << '\n';  
    cout << "signed int: " << sint_ << '\n';

2 个答案:

答案 0 :(得分:20)

这是因为第一行意外<< '\n'。其效果是将最小值的位移位13个位置(13为\n的字符代码)。由于最负值的位模式为1000...0,因此结果为0。

答案 1 :(得分:2)

signed int sint_ = numeric_limits<signed int>::min() << '\n';  

最后这个\n是什么?

这不是你想要的:

signed int sint_ = numeric_limits<signed int>::min();

演示:http://ideone.com/aOXGH