gpt4 book ai didi

c - unsigned int a = -1 的位表示

转载 作者:行者123 更新时间:2023-12-02 06:58:37 25 4
gpt4 key购买 nike

unsigned int x =-1;的位表示是什么我们可以为 unsigned int 分配一个负整数吗?

#include<stdio.h> 
int main(){
unsigned int x = -1;
int y = ~0;
if(x == y)
printf("same");
else
printf("not same");
return 0;
}

输出:

same

怎么可能,x 是无符号的

#include<stdio.h> 

int main()
{

unsigned int x = -4;
if (x == -4)
printf("true");
else
printf("FALSE");
}

输出:

true

最佳答案

unsigned int 值与 int 值进行比较时,int 值会隐式转换为 unsigned int 类型。该转换的结果是congruent对原始值模 2N,其中 Nunsigned int 中的值形成位数。这个模数等于 UINT_MAX + 1

为此初始化

unsigned int x = -1;

用一些无符号值初始化x congruent-1UINT_MAX + 1。顺便说一句,这只不过是 UINT_MAX。该值在 unsigned int 对象的每个值形成位中都有 1。它适用于任何无符号类型。

表达式 ~0signed int 类型的域中求值,然后将 y 隐式转换为 unsigned intx == y 比较。显然,在您的平台上,转换产生相同的 unsigned int 值,所有值形成位都设置为 1。因此相等。

初始化

unsigned int x = -4;

用一些无符号值初始化x congruent-4UINT_MAX + 1。相比之下,x == -4 右侧通过相同的规则转换为无符号类型。因此相等。

关于c - unsigned int a = -1 的位表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26127273/

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