进制与位运算
在我们编程的领域,进制的重要性不言而喻。为什么我的世界只有0与1,这之间到底有什么不可不知的秘密
为什么旁边的“高级工程师”,天天学框架、学架构,反而给他学废了。这一切的一切究竟是计算机的计算扭曲,还是计算机的道德沦丧。今天让我们进入哪个传说中只有0与1的世界。
进制介绍
进制是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally
mark计数)。 对于任何一种进制—X进制,就表示每一位置上的数运算时都是逢X进一位。
是逢十进一,是逢十六进一,就是逢二进一,以此类推,x进制就是逢x进位。
常见进制表示
二进制: 0, 1 逢2进1,常以0b,0B开头
八进制:0-7 逢8进1,常以o开头
十进制:0-9 逢10进1
十六进制:逢16进1,0-9 A(10)-F(15 )常以0x开头
进制运算
二进制数的加法和乘法基本运算法则各有四条,如下:
0+0=0,0+1=1,1+0=1,1+1=10
0×0=0,0×1=0,1×0=0,1×1=1
进制转换
十进制转二进制
一个十进制整数转换为二进制整数通常采用除二取余法,即用2连续除十进制数,直到商为0,逆序
排列余数即可得到――简称除二取余法.
上面这段话是什么意思呢?逆序排列即二进制中的从高位到低位排序
如以下为例
1 | # 十进制11的二进制 |
- 十进制数除以 2 ,得到商和余数;
- 再用第一步的商除以 2,得到新的商和余数;
- 重复第 1 和第 2 步,直到商为 0;
- 将先得到的余数作为二进制数的高位,后得到的余数作为二进制数的低位,依次排序;
1 | def decimal_to_binary(value: int): |
二进制转十进制
二进制转化为十进制的原理,(二进制数长度(不含0b) - 1) 次方 X 此位置的数值
1 | 0b1101 13 |
代码实现
1 | def binary_to_decimal(binary: str): |
1 | 13: |
同理得进制转换
原码、反码、补码
位运算
现代的计算器技术全部采用的是二进制,因为他只使用0、1两个数字符号,非常简单方便,易于计算机实现。计算机内部都是采用二进制数来表示