Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 无符号整数a=-1的位表示_C_Integer Promotion - Fatal编程技术网

C 无符号整数a=-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; 如果

无符号整数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;
如果(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标准不要求。