南岸区天燃气公司电话:请教一道数据转换的问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/30 15:32:06
请教一道数据转换的问题

printf("%d,%d,%u\n",016.16.-16);

答案是:14,16,6542

请问一下为什么-16转成无符号后会变成6542,是怎么一个转换过程?

应该输出65520

-16在用二进制补码表示是:
1111 1111 1111 0000
而这个数理解为无符号数就是65520

65520

%u 是unsigned int 的意思,也就是无符号的整型。
printf("%d,%d,%u\n",016,16,-16);
上面%u对应的数据是负数,是带符号的,所以要将其符号位去掉,这样的话就变成了int的最大值减去16
不同的平台对于int值的最大值约定并不一样,所以这个结果也是不一定的,在Solaris 8上面的结果是 : 4294967280

如果是:
printf("%d,%d,%d\n",016,16,-16);
的话,结果就是:14,16,-16