前言
在做算法题的时候,看到当时大一学的二进制负数计算有些遗忘了
先大概记录一下规则,之后再补全
负数的二进制如何计算
- 三步走:1.其正数的二进制 2.补码 3.加1
- 举个例子:假如现在要在16位下表示-5
- step1:5的2进制是 0000 0000 0000 0101
- step2:补码 1111 1111 1111 1010
- step3:别忘了还要加1!1111 1111 1111 1011
发现了一个有趣的现象
假如在16位的情况下:
负数的减法:
-5 的二进制是:1111 1111 1111 1011
-6 的二进制是:1111 1111 1111 1010
-7 的二进制是:1111 1111 1111 1001
-8 的二进制是:1111 1111 1111 1000
再看看正数的减法:
5 的二进制是: 0000 0000 0000 0101
4 的二进制是: 0000 0000 0000 0100
3 的二进制是: 0000 0000 0000 0011
2 的二进制是: 0000 0000 0000 0010
不管是正是负,只要是减一加一,对低位的操作是一样的!而且减一操作有个特点,就是一定能把减一前的最低位的1的位置变成0!这个操作能够帮助我们找到二进制数中有多少1存在(无论正负!)
【详情可以参考这题】