Don';不理解简单的C程序if/else结果
当我们知道100000>-1时,为什么输出为“是”。因此,它应该打印“否”,但很简单,当比较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
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;