为什么这会将零作为输出?我怀疑有些编译器在工作,但为什么呢?
signed int sint_ = numeric_limits<signed int>::min() << '\n';
cout << "signed int: " << sint_ << '\n';
答案 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();