【发布时间】:2014-08-27 02:31:47
【问题描述】:
谁能告诉我为什么 if 条件为假?
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int a;
unsigned int ua;
a = -1;
ua = a;
cout << "ua: " << ua << endl;
if (ua != -1)
cout << "Is unsigned" << endl;
else
cout << "Is signed" << endl;
return 0;
}
我的意思是,这里 ua == int_max_value,它不是 -1,但是当我运行它时,输出是
已签名
【问题讨论】:
-
-1被转换为unsigned int以进行比较。 -
如果-1转换为unsigned int,它怎么能持有-1?我的意思是,-1 已签名:S
-
-1使用二进制补码算法进行转换,得到UINT_MAX。只是 C++ 有一种非常强烈的“倾向”,可以将所有内容都转换为无符号整数(发生这种情况的确切规则相当复杂;有关详细信息,请参阅 C++ 标准)。 -
@harryPoker:没有。但它再次为转换签名!