Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无符号int值未给出正确的结果_C++ - Fatal编程技术网

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
的值是什么。