二进制与十进制的转换
10进制转2进制
正数
正数的10进制转2进制,除2曲玉,从上到下为高位到低位,可以参考上边的真草图😅
负数
以-7为例
1、首先把负数的绝对值转为二进制 [-7] -> 7 - > 0111
2、对上一步得到的二进制按位取反~ -> 1000
3、对上一步得到的二进制+1 -> 1001
即 -7 = 1001
再以-3为例:
-3 -> |-3| -> 3 -> 0011 -> 1100 -> 1101
-4:
-4 -> |-4| -> 4 -> 0100 -> 1011 -> 1100
2进制转10进制
正数
按权相加
例如:
4位二进制,0011 -> 1*2^0 + 1*2^1 + 0*2^2 + 0*2^3 = 1+2+0+0 = 3
4位二进制,0101 -> 1*2^0 + 0*2^1 + 1*2^1 + 0*2^3 = 1+0+4 = 5
负数
我们以10进制转2进制得到的结果为例\
-7 = 1001
1、首先对负数的2进制取反 1001 取反 得到 0110 2、取反的二进制转为10进制 得到6 3、得到的十进制+1,然后加上符号得到结果 即 -(6+1) = -7
-3 = 1101
1、负数的二进制取反 1101取反得到0010
2、取反的二进制转10进制 0010->2
3、打到的10进制+1,加符号 -(2+1)=-3
按位与 &
描述
二进制下,相对应位都是1,则结果为1,否则为0
例如: 3&1 -> 011 & 001 -> 001 = 1
应用实例
判断整数n的奇偶性,n&1 == 1 ? 奇数 : 偶数
奇数的二进制的首位为1而偶数为0,1的非首位皆为0,n&1后,非首位皆为0
n&1,若n为基数则首位为1,非首位皆为0,即十进制为1,偶数则全为0,即十进制为0
按位或 |
描述
二进制下,如果相对应位都是 0,则结果为 0,否则为 1
例如:3|1 -> 011 | 001 -> 011 = 3
应用实例
获取大于当前值的最小整数,例如:3-4, 4-6, (n|1)+1
1的非首位皆为0,n|1后,n的非首位皆会保持原值,而首位时终为1,
奇数的首位本身即为1,即奇数|1结果保持不变,+1后为大于该奇数的偶数
偶数的首位本身为0,即偶数|1结果会比原值>1,+1后为大于该偶数的偶数
按位异或 ^
描述
二进制下,如果相对应位不通,则结果为 1,否则为0
例如:3|1 -> 011 ^ 001 -> 010 = 2
应用实例
加密解密: 原值val,密钥s 则 val^s = r => r^s = val
按位取反 ~
描述
按位取反运算符翻转操作数的每一位,即0变成1,1变成0,符号位也取反
例如 ~3 -> ~0011 -> 1100 转为10进制(最高位是1代表负数,负数转10进制,先取反,然后得到10进制的值+1,再加负号)
即 1100 -> 0011 -> 3+1 > 4 -> -4
即 ~3 对于的2进制位1100 对应的10进制为 -4
左移 <<
左移保持符号位,即正负号不变,左移N位相当于 原值乘以2的n次方
例如:3<<2 -> 0011 -> 1100 = 12
右移 >>
右移后,负数高位补1 正数高位补0,右移N位相当于原值除以2的n次方
示例(共4位):
4>>1 -> 0100 -> 右移后为 010 高位为0,补零后 0010 = 2
3>>1 -> 0011 -> 右移后为 1 高位为0,补零后 0001 = 1
-4>>1 -> 1100 -> 右移后为 10 高位为1,补1后 1110 = -2
-3>>1 -> 1101 -> 右移后位 10 高位为1, 补1后 1110 = -2
无符号右移
连同高位符号位右移,右移后,高位补0,正数无符号右移同右移,负数无符号右移往往会得到一个大的正数
示例(共4位):
4>>>1 -> 0100 -> 右移后为010 高位补零后 0010 = 2
-4>>>1 -> 1100 -> 右移后为110 高位补零后 0110 = 6