下列参数代码的输出:
char *usrName="hello world"
if(-1<sizeof(usrName))
{printf("NG\n");
}
else
{printf("OK\n");
}
正确答案:OK\n
为什么会造成这样的结果,由于进行比较运算时,需要将先将两个数据转换为同一数据类型。
显然上述代码中-1 为int类型,而 sizeof运算符返回值为unsinged long long类型
根据下列两条粗糙的规则,则需要将-1转化为unsigned long long类型
a.若两种类型的字节数不同,转换成字节数高的类型
b.若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型
ps 负数在计算机中的二进制表示是通过正数的二进制补码表示,
1 对int 型的二进制表示 为
00000000 00000000 00000000 00000001
1的反码为
11111111 11111111 11111111 11111110
补码=反码+1
11111111 11111111 11111111 11111111
当把一个低精度的数据类型转成一个高精度的数据类型时,需要位数拓展:
方法1:零位拓展
如果-1转化为unsigned long long类型就会变成2*32-1
方法2:符号位拓展
转换为2^64-1
所以在unsigned long long类型下 -1 >sizeof(usrName)
所以输出结果为OK\n