任何人都可以解释此程序的类型促销以及为什么输出相同
Can anyone explain type promotion of this program and why output is same
为什么这两个数字比较x和y进行的比较如何?
#include <stdio.h>
int main()
{
unsigned int x = -1;
int y = ~0; //type promotion from int to unsigned int
if (x == y)
printf("same");
else
printf("not same");
return 0;
}
c 中的〜运算符(以及其他类似C和Java(例如C和Java(的语言(执行一个非操作 - 操作数中的所有1位都设置为0,所有0位且所有0位在操作数中设置为1。换句话说,它创建了原始数字的补充。有关更多详细信息,请参见此处。
位不是运算符具有有趣的属性 关于两个补充代表的数字,它改变了数字的 签名然后减去一个(如以上示例中所示(。
如果您检查了〜-operator对此做什么:
#include <stdio.h>
int main()
{
unsigned int x = -1;
printf("%in",x); // treat data as if singed integer
printf("%un",x); // treat data is if unsigned integer
int y = ~0; //type promotion from int to unsigned int
printf("%in",y);
if (x == y)
printf("same");
else
printf("not same");
return 0;
}
您可以看到:
成功时间:0内存:16064信号:0
-1相同
在这里尝试。
为什么这样?
整数中-1的位表示(有关详细信息,请参见两者的补充(
11111111 11111111 11111111 11111111
如果您在未签名的整数中阅读此信息
11111111 11111111 11111111 11111111
是最大的未签名int。-1在未签名的int中成为由于周围的最大无符号int数。因此,无符号-1和int〜0是相同的。
相关文章:
- 为什么输出精度没有正确舍入?
- 为什么输出窗口上没有显示输出?
- 为什么输出是整数而不是双精度?
- 为什么输出总是空的?
- 为什么输出流首选" "而不是""?
- 为什么输出不同以及此代码中有什么错误
- 为什么输出在睡眠后没有换行符?
- 为什么输出会进入无限循环
- 为什么输出错误崩溃
- 我试着了解方法覆盖是如何工作的,不知道为什么输出 2
- 任何人都可以解释此程序的类型促销以及为什么输出相同
- 为什么输出不是 00706
- C++:为什么输出迭代器不支持比较操作?
- 为什么输出是 2 而不是 7 ?+ 号如何使它与众不同
- 什么是bad_alloc?为什么输出屏幕没有显示所有值
- 为什么输出是无限的?
- 我无法理解为什么输出在这个 for 循环中出现 10
- 为什么输出有时会失败
- C 参考和类对象的非参考返回 - 为什么输出相同
- 为什么输出中缺少字母'D'?