繁体   English   中英

无符号int的位表示a = -1

[英]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的原始值一致 ,其中Nunsigned int的值形成位的数量。 该模数等于UINT_MAX + 1

出于这个原因初始化

unsigned int x = -1;

初始化x与一些无符号的值一致 ,以-1UINT_MAX + 1 顺便说一下,这只不过是UINT_MAX 该值在unsigned int对象的每个值形成位中都有1 它以任何无符号类型的方式工作。

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

初始化

unsigned int x = -4;

初始化x与一些无符号的值全等-4UINT_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM