在以下代码段中将是:
{
unsigned int x=-1;
int y;
y = ~0;
if(x == y)
printf("same");
else
printf("not same");
}
a. same, MAXINT, -1 b. not same, MAXINT, -MAXINT c. same , MAXUINT, -1 d. same, MAXUINT, MAXUINT e. not same, MAXINT, MAXUINT
有人可以解释我的工作原理或者只是解释一下片段吗?
我知道它是关于两个补码n等.MAXINT和-1的意义是什么?这是因为unsigned int和int的事情 - 我是对的吗?
我正在阅读关于通常算术转换的C99标准.
如果两个操作数具有相同的类型,则不需要进一步转换.
否则,如果两个操作数都具有有符号整数类型或两者都具有无符号整数类型,则具有较小整数转换等级类型的操作数将转换为具有更高等级的操作数的类型.
否则,如果具有无符号整数类型的操作数的秩大于或等于另一个操作数的类型的秩,则具有有符号整数类型的操作数将转换为具有无符号整数类型的操作数的类型.
否则,如果带有符号整数类型的操作数的类型可以表示具有无符号整数类型的操作数类型的所有值,则具有无符号整数类型的操作数将转换为带有符号整数类型的操作数的类型.
否则,两个操作数都转换为无符号整数类型,对应于带有符号整数类型的操作数的类型.
所以我想说我有以下代码:
#include <stdio.h>
int main()
{
unsigned int a = 10;
signed int b = -5;
printf("%d\n", a + b); /* 5 */
printf("%u\n", a + b); /* 5 */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我认为粗体段落适用(因为unsigned int并且signed int具有相同的等级.为什么不转换为b unsigned?或者它可能转换为无符号但是有些东西我不明白?
感谢您的时间 :-)