gpt4 book ai didi

c - 从有符号整数升级到无符号整数期间二进制数字变化的描述/会发生什么?

转载 作者:行者123 更新时间:2023-11-30 20:43:31 24 4
gpt4 key购买 nike

这里y被提升为unsigned int并与x进行比较。二进制数比较是否每次都会发生?那么 if(12 == -4) 完成了,为什么它不能将 LHS 提升为无符号并打印“相同”?(考虑到 12 = 1100,-4 = 1100)如果我错了,请纠正。

#include<stdio.h>
int main()
{
unsigned int x = -1;
int y = ~0;
if(x == y)//1.what happens if( y == x) is given?.O/P is "same" then also.
printf("same");//output is "same"
else
printf("not same");
printf("%d",x);//2.output is -1.Won't x lose it's sign when unsigned is given?My hunch is x should become +1 here.
getchar();
return 0;
}

还请在代码注释中提供适用于上述代码的二进制数以及 1. 和 2. 的答案。谢谢。

最佳答案

首先在您的系统中检查 unsigned int 的大小.

在我的机器中:printf("%zu\n",sizeof(unsigned int));//4 byte

因为我们有 4 个字节来存储 Uint 数据类型,所以我们可以说

unsigned int x ;//

x:Range[0, Max_number_with_4byte]

Max_number_with_4byte: (2^32) - 1 = 0xFFFFFFFF

显然,由于无符号,x 只能保存正数。

但是你给x = -1; ,假设一种循环行为,当我们从 0 向后退一步时,x 到达最后一点:Max_number_with_4byte。

并将 x 打印到屏幕上显示:0xFFFFFFFF

使用 printf("%x\n",(unsigned int )x); 查看 x 的十六进制等效值和printf("%y\n",(unsigned int )y);查看 x,y 是否相等。

考虑y = ~0;如果 y 中使用 ~ 运算符,则 y 有 32 位,所有位都更改为 1,以十六进制形式我们看到 FFFFFFFF 。 (我们不能用 printf 打印二进制数并使用相等的十六进制表示)

你可以看到这个online calculator如何转换-10xFFFFFFFF

回答你的问题

y不会提升为 unsigned int。它只是改变了它的位形式 0 -> 1

每次都会进行二进制数比较吗?

在任何情况下都是,例如if(10 > 20)首先将10和20都转换成对应的二进制数然后进行比较。

if (12 == -4)请参阅我上面的解释。

-4不等于1100计算机内部(您的变量)。

-4 = 0xFFFFFFFC see

关于c - 从有符号整数升级到无符号整数期间二进制数字变化的描述/会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45886231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com