【发布时间】:2018-06-14 17:06:01
【问题描述】:
#include<stdio.h>
void main()
{
int a = -1;
unsigned int b =15;
if(b==a)
printf ("b is equal to a");
}
输出为空。负整数存储为相同正数的 2 的补码。当将整数与 unsigned int 进行比较时,通过将 2 的补码视为 unsigned int(此处为 15)将整数提升为 unsigned int,但即使 2 的补码为 -1,但输出为空是 15
【问题讨论】:
-
即使 -1 的 2 的补码是 15 ? 不,你错了。再检查一次。
-
幸运的是
int可以存储超过 4 位 -
输出为空,表示
b不等于a。这是意料之中的,因为将-1转换为unsigned int会得到UINT_MAX,这绝对不是15。 -
-1的 2 的补码只有在使用不符合标准的 4 位整数时才为15。无论如何,2 的补码适用于signed值。
标签: c int unsigned-integer integer-promotion