C 无符号整数a=-1的位表示
无符号整数x=-1的位表示是什么代码> 我们能用一个负整数分配无符号整数吗C 无符号整数a=-1的位表示,c,integer-promotion,C,Integer Promotion,无符号整数x=-1的位表示是什么 我们能用一个负整数分配无符号整数吗 #include<stdio.h> int main(){ unsigned int x = -1; int y = ~0; if(x == y) printf("same"); else printf("not same"); return 0; } #包括 int main(){ 无符号整数x=-1; int y=~0; 如果
#include<stdio.h>
int main(){
unsigned int x = -1;
int y = ~0;
if(x == y)
printf("same");
else
printf("not same");
return 0;
}
#包括
int main(){
无符号整数x=-1;
int y=~0;
如果(x==y)
printf(“相同”);
其他的
printf(“不相同”);
返回0;
}
输出:
同样的
x是无符号的,这怎么可能呢
#include<stdio.h>
int main()
{
unsigned int x = -4;
if (x == -4)
printf("true");
else
printf("FALSE");
}
#包括
int main()
{
无符号整数x=-4;
如果(x==-4)
printf(“真实”);
其他的
printf(“假”);
}
输出:
真的
当将
unsigned int
值与int
值进行比较时,int
值隐式转换为unsigned int
类型。该转换的结果是到模2N的原始值,其中N
是无符号int
中形成值的位数。该模等于UINT\u MAX+1
因此,初始化
unsigned int x = -1;
unsigned int x = -4;
使用一些无符号值将x
初始化为-1
模UINT\u MAX+1
。顺便说一句,这只不过是UINT\u MAX
。此值在构成无符号int
对象位的每个值中都有1
。它以这种方式处理任何无符号类型
表达式~0
在signed int
类型的域中求值,然后y
在x==y
比较中隐式转换为unsigned int
。显然,在您的平台上,转换产生相同的无符号int
值,所有值形成位设置为1
。因此平等
初始化
unsigned int x = -1;
unsigned int x = -4;
使用一些无符号值将x
初始化为-4
模UINT\u MAX+1
。与之相比,x==-4
右侧被同样的规则转换为无符号类型。因此平等
x是无符号的,这怎么可能呢
#include<stdio.h>
int main()
{
unsigned int x = -4;
if (x == -4)
printf("true");
else
printf("FALSE");
}
这是“常用的算术转换”-=两侧的操作数具有不同的类型,因此必须首先将它们转换为相同的类型。当int或更大的类型仅因有符号而不同时,其规则是无符号赢,因此这会将-4
转换为无符号等效值,就像将-4
指定为无符号整数一样
有关更多信息,请参见int中的负整数存储在2的补码中 假设我们有一个数据类型,比如说4位 第一位0表示整数为正或负,因此其最大值为0111,即7 所以1可以写成0001 对于-1,它必须写在2的补码中,因为它是负数 -1=~(0001)+1=(1110)+1=1111
因此,将此数据类型设为unsigned将把-1读作15。unsigned不能是负数:)当您写“unsigned”这个词时,您认为它不是什么意思吗?您的问题的答案已经在您的示例中了。我的意思是,如何以二进制形式表示-1。-1和1相同的逻辑是什么-1总是UMAX see和@larsmans:语言需要
(无符号)(-1)
在所有平台上生成UNIT_MAX
,而不管它们是否使用2的实现。“当整数类型的值转换为[…]无符号时,该值将通过反复加上或减去新类型中可以表示的最大值的一个值来转换,直到该值在新类型的范围内。”(C11,§6.3.1.3)。@mafso:啊,我指的是相同大小的类型。具体细节见我添加的链接。请注意,这只适用于2的补码机器,C标准不要求。