这只是对正整数而言
——理论证明:
假设原码是某个二进制数字0或者1,记作a。
取反则!a。
补码+1=>(!a)+1相当于是对a再一次进行取反(因为二进制不是0就是1),所以等于做了(!!a)操作。因此a(原码)=!!a(补码)
在计算机中,只用补码。
所以,1111 0101,必定是要当做补码来输出-11。
如果把 1111 0101,当做-111 0101 来输出,那就违背了原则。
1111 0101 是不是补码?
这个事,要看你采用的算法。
-11、246 的二进制都是 1111 0101。
那么,1111 0101 到底是什么数?
你算算看:
1111 0101 + 0000 1111 = (1) 0000 0101。
如果你舍弃进位,这就是:-11 + 15 = 5。
-11、15,还有 5,就都是补码。
如果你保留进位,这就是: 246 + 15 = (256) 5 = 261。
这么算,这三个数,都不是补码。
计算机中的程序,都是人编写的。
1111 0101 到底是什么东西?
这就完全取决于编程人。
与首位是 1 是 0,没有任何关系。
假设
signed char i = 10;
signed char j = ~i;
此时j的值就是-11。。。当然输出-11
什么叫十进制形式。。。
这个其实取决于数据类型, 数据类型决定了机器如何去理解这一串二进制数
int 型 有符号型是补码
unsigned int 无符号类型是原码