业余自学C语言的初学者,请问1个小疑点

业余自学C语言的菜鸟,请教1个小问题

十进制数9进行~位运算
9的二进制为1001  进行~运算后
变为0110
-6
但电脑算的是-10
求问为什么?


------解决方案--------------------
计算机中都是以补码形式存储
以32位int为例:
9的二进制形式是(同时也是补码,正数的补码为其本身)
0000 0000 0000 0000 0000 0000 0000 1001
取反之后是
1111 1111 1111 1111 1111 1111 1111 0110
这是~9的原码
要转换成补码才是计算机存储的形式
即符号位不变,其余位取反加1
1000 0000 0000 0000 0000 0000 0000 1010
------解决方案--------------------
计算机中,数值使用补码表示。
------解决方案--------------------
1001
~1001=0110->补码1010即-10