int a=10;结果是︺︺︺︺︺︺︺a
那为什么是-10时,结果是fffffff6
是-2时,结果是fffffffe
???
因为在计算机里面任何数都是以补码形式存在的
负数的补码= 符号位+(原码按位取反+1)
正数的符号位是0
负数的符号位是1
所以会有负数的原码
-10 = 1000_0000_0000_0000_0000_0000_0000_1010
然后符号位保持不变,其它的按位取反
=1111_1111_1111_1111_1111_1111_1111_0101
然后再+1
=1111_1111_1111_1111_1111_1111_1111_0110
然后转化为16进制
=0xfffffff6
因为负数以16进制输出时是按数值在内存中的补码形式输出的
%x表示用16进制的形式输出,10就是16进制的a;负数是补码存储的,
三步骤:
1.取绝对值;
2.取反
3.加1
printf("%8x",a)是16进制输出,当a是负数,则输出十六进制的补码
这个涉及到负数的补码形式,比如1111 1111 1111 1111 1111 1111 1111 1110 就是 fffffffe,也就是-2。-10跟-2差8个,e往前推8个,正好是6.