不废话上代码喽
int main()
{
char a = -128;
printf("%u\n", a);
system("pause");
return 0;
}
输出结果是什么大家猜猜看
答案就是
oО猜囨箌紦,铟爲挖才煶主角筜嘫煶由挖說出dā荌嘍oo
本次博客就到这,掰!
开玩笑了,正确答案是
你以为是什么啊,当然就是这一堆堆莫名其妙的数字。其实这堆莫名其妙的数字也没有很莫名奇妙了。可以试着把它转化为二进制来看看
发现这个数是不是很有规律
1111 1111 1111 1111 1111 1111 1000 0000
让我们来看看到底是为什么会这样:
char a =-128
因为 char 类型变量占一个字节。所以这个 -128 的二进制表示为 1000 0000
但最后是以 %u 的格式来输出,%u就是无符号的 int ,要占四个字节的啊兄弟。这就是C语言中数据的隐式类型转换的一个小坑坑。
变量 a 由一个字节转换为四个字节。高位自动补全为符号位,就是如果是负数高位补1,如果是正数高位补零。比如
int main()
{
char a = 127;
printf("%u\n", a);
system("pause");
return 0;
}
输出结果仍为 127 因为虽然会隐式转换为 unsigned int 。但由于它为正数,所以高位补0,不会对原来的数值有影响。
具体多余的位为什么要补符号位,很复杂啦有没有人来解释一下,反正我是不明白。到时候明白了再回来说8,掰!