Don';不理解简单的C程序if/else结果

Don';不理解简单的C程序if/else结果,c,C,当我们知道100000>-1时,为什么输出为“是”。因此,它应该打印“否”,但很简单,当比较long和unsigned long时,我真的可以得到它,然后两者都转换为unsigned long,因此(取决于平台),-1值变为0xffffff。结果很清楚。在这一行: int main() { unsigned long a= 100000; long b = -1; if (b > a) printf("yes\n"); else

当我们知道100000>-1时,为什么输出为“是”。因此,它应该打印“否”,但很简单,当比较
long
unsigned long
时,我真的可以得到它,然后两者都转换为
unsigned long
,因此(取决于平台),
-1
值变为
0xffffff
。结果很清楚。

在这一行:

int main()
{
    unsigned long a= 100000;
    long b = -1;
    if (b > a)
        printf("yes\n");
    else
        printf("No\n");

    return 0;
 }
您正在比较
无符号长
,这会导致错误

简单地改变

if (b > a)


第一个问题
void main()
是一种非常古老的定义
main()
的方法,这意味着您正在使用非常过时的资源。第二个问题:您没有启用警告标志或忽略了它们。这应该会清除一些问题:0xFFFFFF中的值-1是如何变成的???抱歉@dlask会给出一个要点或任何类型的链接?它叫做二的补码好吧,我明白你的意思,但我想知道unsigned是如何使long a的值小于long b的?@SJith:看,unsigned意味着它的值将从0开始,并且不能包含负数。因此,当您尝试将负数拟合到无符号中时,它会隐式地转换为非负数。所以,-1将被转换为,比如说2^32-1,它大于10000,所以你得到了你的输出。谢谢@karma_geek:)
 unsigned long a= 100000;
  long a= 100000;