C++ 无符号int值未给出正确的结果
下面的程序应该打印“错误”,但打印成功。为什么C++ 无符号int值未给出正确的结果,c++,C++,下面的程序应该打印“错误”,但打印成功。为什么 #include<iostream> using namespace std; int main() { unsigned int a; a=-10; if(a == -10) cout << "success" ; else cout << "error" ; return 0; } #包括 使用名称空间std; int main() {
#include<iostream>
using namespace std;
int main()
{
unsigned int a;
a=-10;
if(a == -10)
cout << "success" ;
else
cout << "error" ;
return 0;
}
#包括
使用名称空间std;
int main()
{
无符号整数a;
a=-10;
如果(a==-10)
cout用于比较的转换使它们再次相等。但这应该会导致编译器发出警告。Gah,我一直在看这个,试图找出OP发现任何令人惊讶的事情的原因,但没有注意到无符号的规范。+1,不管怎样;这正是发生的情况。在a=-10之后,你会怎么想
,变量a
将不同于-10
?@David:-无符号int始终为正值,但赋值为负值不起作用,因此对于无符号int,a=-10应该打印错误,但打印成功。因此,这是一个困惑。我想我对问题和代码感到困惑。有两个不同的问题,一个是编译器应该抱怨赋值。另一个问题是,在接受赋值后,比较是否应该为真。在第一种情况下,编译器不需要抱怨,因为存在可用的转换,如果您提高警告级别,一些编译器会发出警告。在第二种情况下,唯一明智的事情是赋值后检查为true。假定a=x
是正确的操作,赋值后必须保持a==x
无论a
的值是什么。