[英]bit representation of unsigned int a = -1
unsigned int x =-1;
的位表示是什么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;
}
输出:
相同
怎么可能,x是无符号的
#include<stdio.h>
int main()
{
unsigned int x = -4;
if (x == -4)
printf("true");
else
printf("FALSE");
}
输出:
真正
当一个unsigned int
值与int
值,则int
值被隐式转换为unsigned int
类型。 该转换的结果与模2 N的原始值一致 ,其中N
是unsigned int
的值形成位的数量。 该模数等于UINT_MAX + 1
。
出于这个原因初始化
unsigned int x = -1;
初始化x
与一些无符号的值一致 ,以-1
模UINT_MAX + 1
。 顺便说一下,这只不过是UINT_MAX
。 该值在unsigned int
对象的每个值形成位中都有1
。 它以任何无符号类型的方式工作。
表达~0
中的域被评估signed int
型,然后y
被隐式转换为unsigned int
在x == y
比较。 显然,在您的平台上,转换生成相同的unsigned int
值,并将所有值形成位设置为1
。 因此平等。
初始化
unsigned int x = -4;
初始化x
与一些无符号的值全等到-4
模UINT_MAX + 1
。 相比之下, x == -4
,右侧通过相同的规则转换为无符号类型。 因此平等。
怎么可能,x是无符号的
这是“通常的算术转换” - ==
两侧的操作数具有不同的类型,因此必须先将它们转换为相同的类型。 当通过类型仅符号性为不同类型的int或更大的规则是无符号胜说,所以这个转换-4
到无符号等价值,只是因为它没有当你分配-4
成一个无符号整数。
有关更多信息,请参阅二元运算符两侧的签名不同时,促销规则如何工作?
in int负整数存储在2的补码中。
假设我们有一个4位的数据类型。
第一位0表示整数为正,否则为负,因此其最大值为0111,即7
所以1可以写成0001
对于-1,它必须用2的补码写,因为它是负的;
-1 =〜(0001)+1 =(1110)+ 1 = 1111;
所以使这个数据类型无符号读-1为15。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.