C 为什么1>-1似乎是假的?

C 为什么1>-1似乎是假的?,c,char,int,C,Char,Int,我已经编写了以下代码,但问题是它没有显示所需的输出 #include<stdio.h> int main() { unsigned x=1; signed char y=-1; if(x>y) printf("x>y\n"); else printf("x<=y\n"); return 0; } #包括 int main() { 无符号x=1; 符号字符y=-1; 如果(x>y) print

我已经编写了以下代码,但问题是它没有显示所需的输出

#include<stdio.h>
int main()
{
    unsigned x=1;
    signed char y=-1;
    if(x>y)
        printf("x>y\n");
    else
        printf("x<=y\n");

    return 0;
}
#包括
int main()
{
无符号x=1;
符号字符y=-1;
如果(x>y)
printf(“x>y\n”);
其他的

printf(“x
无符号x=1;
=
无符号整数x=1;

x=0x00000001;
y=0xff

当比较
x
y
时,会出现
类型转换
,因为两者的类型不同

y
将首先转换为
int
,值为
0xFFFFFF
,但两者的类型仍然不同,因此
y
的类型将转换为
无符号int
,值为
0xFFFFFF


现在,比较两个
无符号int
,值是:
x=0x00000001
y=0xffffff
。现在,您应该了解原因了。

无符号x=1;
=
无符号int x=1;

x=0x00000001;
y=0xff

当比较
x
y
时,会出现
类型转换
,因为两者的类型不同

y
将首先转换为
int
,值为
0xFFFFFF
,但两者的类型仍然不同,因此
y
的类型将转换为
无符号int
,值为
0xFFFFFF


现在,比较两个
无符号int
,值是:
x=0x00000001
y=0xFFFFFF
。现在,您应该了解原因了。

由于从有符号字符到无符号int的类型转换,程序给出了错误的输出。
尽量避免字符到整数的隐式类型转换。

由于从有符号字符到无符号整数的类型转换,程序给出了错误的输出。
尽量避免将字符转换为int隐式类型转换。

有符号字符操作数
y
转换为无符号操作数
y
,产生一个大的正值。如果有符号字符y转换为无符号,则它应该是y=1,然后是x==y,但当我使用条件if(x>=y)时if条件不是真的。不,将
-1
转换为
无符号
的结果是
UINT_MAX
,而不是
1
。现在,知道了。是的,在转换无符号字符后,它是一个巨大的数字10位。这就是if条件变为假的原因。@luiscolrado
(无符号)-1
不是未定义的行为。从有符号到无符号的转换和赋值是明确定义的。
有符号字符
操作数
y
被转换为
无符号
,产生一个大的正值。如果有符号字符y被转换为无符号,那么它应该是y=1,然后是x==y,但当我使用条件if(x>=y)if条件不是真的。不,将
-1
转换为
无符号
的结果是
UINT_MAX
,而不是
1
。现在,知道了。是的,在转换无符号字符后,它是一个巨大的数字10位。这就是if条件变为假的原因。@luiscolrado
(无符号)-1
不是未定义的行为。从有符号到无符号的转换和赋值是定义良好的。-1不能转换为无符号,但编译器允许,会产生未定义的行为…这是错误的常见原因。最好考虑将负数转换为无符号作为未定义行为的后果,而不是assum毫无疑问,-1只是与0xFFFFFF进行比较(64位整数或短整数会发生什么情况?)。在非2的补码算术体系结构中会发生什么情况?
y=0xFF
不是一种很好的写东西的方法。
y
-1
。内存中的表示可能是所有位的集合,但是(a)这与问题无关,以及(b)当你写
0xFF
时,你会混淆你所说的是内存中的表示,还是C整数文字。@MattMcNabb如果你想要一个无符号的整数,就写
~0
,但不要用
-
符号来表示无符号整数。
0xFF
不是一个好值的原因是依赖性对于体系结构中的字长。好的,有一些方法可以循环,而不必依赖于体系结构,但使用符号不是其中之一。-1不能转换为无符号,但编译器允许,产生未定义的行为…这是错误的常见原因。最好考虑转换负数的后果将数字改为无符号是未定义的行为,而不是毫无意义地假设-1仅与0xFFFFFF进行比较(64位整数或短整数会发生什么情况?)在非二的补码算术体系结构中会发生什么?
y=0xFF
不是一种好的写东西的方法。
y
-1
。内存中的表示可能是所有位集,但是(a)与问题无关,以及(b)当你写
0xFF
时,你会混淆你所说的是内存中的表示,还是C整数文字。@MattMcNabb如果你想要一个无符号的整数,就写
~0
,但不要用
-
符号来表示无符号整数。
0xFF
不是一个好值的原因是依赖性架构中的单词长度。好的,有一些方法可以循环使用,而不必依赖于架构,但使用符号不是其中之一。