C语言类型转换

来源:百度知道 编辑:UC知道 时间:2024/07/05 03:21:43
#include <iostream>
int main()
{
int x=-2;
unsigned int x1=-2;
printf("x=%o\n",x);
printf("x1=%o\n",x1);
printf("x=%o\n",x/2);
printf("x1=%o\n",x1/2);

return 0;
}

对于这段程序的输出,哪位能解释一下。多谢!!!

第一个输出为 177776
因为int为2字节 所以 -2在计算机中以补码存储 为1 111 111 111 111 110
转化为八进制 177776
第二个输出为 177776 原因一样
第三个 结果为177777 x/2=-1 -1补码为1 111 111 111 111 111
转化为八进制 177777
第四个 结果为 77777 因为 x1/2 为unsigned 所以最高位为0
所以转化过来就是77777

%o 以8进制形式输出……