python
算法
进制类型 | 组成 | 代码格式 |
2进制 | 由2个数字组成,有0 和 1 | 0b101 |
8进制 | 由8个数字组成,有0,1,2,3,4,5,6,7 | 0o127 |
10进制 | 有10个数字组成,有0,1,2,3,4,5,6,7,8,9 | 258 |
16进制 | 有16个数字组成,有0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f (字母不区分大小写, a至f分别表明10,11,12,13,14,15) | 0xff、0Xff、0XFF |
其余进制转换为10进制的计算公式:∑X * Yn;
其中 X 为第 n 位的数值,Y 为进制值[2, 8, 16],n为第几位,注意:n 是从 0 开始。 python 中用于进制转换的内置函数有:
int
(x, base=10): 将 x 转为 10 进制, 若是 x 是其余的进制数的字符串, 则 base 应为相应的进制数. 如 int("0b10100101", 2).也可使用 format 函数转化, 具体能够自行查阅.(1)2进制转化为10进制: 2进制如 0b10100101 转化为十进制时,运算为:1*2^0 + 0*2^1 + 1*2^2 + 0*2^3 + 0*2^4 + 1*2^5 + 0*2^6 + 1*2^7= 1 + 0 + 4 + 0 + 0 + 32 + 0 + 128 = 165 在Python中,可使用 int 内置函数来转化为2进制,例如:int(0b10100101) (2)10进制转化为2进制 用待除数(如 426)除以2,得出的结果再去不停地除以2,直到除完最后的结果小于2中止,,在把每一个阶段求得的余数从下到上依次拼接完毕便可。 在Python中,可使用 bin 内置函数来转化为2进制,例如:bin(98)
(1)8进制转化为10进制: 将8进制(0o127)转换为10进制:运算为:7*8^0 + 2*8^1 + 1*8^2 = 7 + 16 + 64 = 87 在Python中,可使用 oct 内置函数来转化为2进制,例如:int(0o127) (2)10进制转化为8进制 例如:用426除以8,得出的结果再去不停地除以8, 直到除完最后的结果小于8中止, 在把每一个阶段求得的余数从下到上依次拼接完毕便可 在Python中,可使用 oct 内置函数来转化为2进制,例如:oct(426)
(1)16进制转化为10进制: 例如:带转化数为0xff ,运算为:15*16^0 + 15*16^1 = 255 在Python中,可使用 oct 内置函数来转化为2进制,例如:int(0x42a) (2)10进制转化为16进制: 例如用426除以16,得出的结果再去不停地除以16, 直到除完最后的结果小于16中止, 在把每一个阶段求得的余数从下到上依次拼接完毕便可 在Python中,可使用 oct 内置函数来转化为2进制,例如:hex(426)
计算机的全部数据在底层都是以二进制的补码形式存储,实际人们看到的数字是原码转化来的,而原码是经过补码获得的。 即:补码 -> 原码 -> 最后人们看到的数。 进制转换的时候须要先把内存中存储的补码拿出来变成原码在进行转换输出。 正数高位补0 负数高位补1(前面空白位全是1) 数字 1 00000000 1 正数高位都补0 数字-1 11111111 1 负数高位都补1 原码: 用来转换对应进制 反码: 二进制码0变1,1变0叫作反码,反码用于原码补码之间的转换.(符号位不变) 补码: 用来作数据的存储运算. 补码提出的根源是让计算机底层的实现减法操做(能够表达出一个数的正负) 言外之意:计算机默认只会作加法,例:5+(-3) => 5 - 3 乘法除法:是经过左移 << 和右移 >> 来实现
正数: 原码 = 反码 = 补码 负数: 原码 = 补码取反+1 给补码求原码 负数: 补码 = 原码取反+1 给原码求补码 (原码 反码 补码之间的转换 , 符号位不要动)
前面提到, 计算机以二进制的形式存储的. 而位运算说穿了, 就是直接对整数在内存中的二进制位进行操做, 不须要转成 10 进制, 所以处理速度比较快.函数
x ^ 0 = x x ^ 1s = ~x # 1s 是二进制位所有位 1 的数, 下同 x ^ (~x) = 1s x ^ x = 0 # 若是 a ^ b = c, 那么 a^c = b, b^c = a 成立, 交换律 a ^ b = c # ==> a^c = b, b^c = a # 结合律 a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c
# 判断奇偶, 至关于 (x % 2) == 1 x & 1 == 1 or == 0
# x 清零最低位的 1 x = x & (x - 1)
# 获得最低为的 1 x & -x
# 1. 将 x 最右边的 n 位 清零 x & (~0 << n)
# 2. 获取 x 的第 n 位值 (0 或 1) (x >> n) & 1
# 3. 获取 x 的第 n 位的幂值 x & (1 << (n - 1))
# 4. 仅将第 n 位置为 1 x | (1 << n)
# 5. 仅将第 n 位置为 0 x & (~(1 << n))
# 6. 将 x 最高位至第 n 位(含)清 0 x & ((1 << n) - 1)
# 7. 将第 n 位至第 0 位(含)位清 0 x & (~((1 << (n + 1)) - 1))