十进制 二进制
1 1
2 10
3 11
4 100
7 111
8 1000
15 1111
16 10000
31 11111
32 100000
63 111111
64 1000000
127 1111111
128 10000000
255 11111111
256 100000000
511 111111111
512 1000000000
1023 1111111111
1024 10000000000
2047 11111111111
2048 100000000000
4095 111111111111
4096 1000000000000
8191 1111111111111
8192 10000000000000
16383 11111111111111
16384 100000000000000
32767 111111111111111
32768 1000000000000000
65535 1111111111111111
65536 10000000000000000
131071 11111111111111111
131072 100000000000000000
262143 111111111111111111
262144 1000000000000000000
524287 1111111111111111111
524288 10000000000000000000
1048575 11111111111111111111
1048576 100000000000000000000
视频教程
网易公开课
http://open.163.com/movie/2011/3/1/U/M8O9BOGDE_M8OEF471U.html
理解
十进制
2 5 5
百 十 个 (位)
百位: 10 * 10 * 2 = 200
十位: 10 * 5 = 50
个位: 1 * 5 = 5
二进制
只能有 0 and 1来表示
十进制(255) 转换为 二进制
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1 (位)
128 = 128 * 1
64 = 64 * 1
...
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255
十进制(250) 转换为 二进制 1 1 1 1 1 0 1 0
250 - 128 = 122 - 64 = 58 -32 = 26 -16 = 10 - 8 = 2 - 4 = -2
2 - 2 = 0
0 - 1 = -1
可减 写1 不可减 写0
python 进制转换
1、num必须是带双引号的,可表示对应数值的字符
int(num,2)=========>将2进制转换成10进制【不能出现0、1以外的字符】
int(num,8)=========>将8进制转换成10进制【不能出现0-7以外的字符】
int(num,16)=========>将16进制转换成10进制【不能出现0-9和a-f以外的字符】
2、num是10进制的字数
bin(num)=========>将10进制转换成2进制【不能出现0-9以外的字符】
oct(num)=========>将10进制转换成8进制【不能出现0-9以外的字符】
hex(num)=========>将10进制转换成16进制【不能出现0-9以外的字符】
function 自定义转换函数
#NumOctHex.py
#自己写一个模块NumOctHex.py,包含8、10、16转换成2进制
'''
str_num的类型必需是可被str转换的整数,如:‘111’、‘123’
16进制中str_num可以是‘123456789abcdef’,且必须是0-9及a-f之间
8进制中str_num可以是‘1234567’,且必须是0-7之间的数
'''
'''
系统自带的转换方法都是通过10进制进行转换的,下面的三个函数是通过将8、10、16转换成2进制
'''
#十六进制to二进制
def hex2bin(str_num):
num = int(str_num,16) #如果是10进制转换二进制,只需要将此处的16删除,或改或10?
while True:?
if num == 0: break?
bit.append(str(rem))??
return ''.join(bit[::-1])
#十进制to二进制
def dec2bin(str_num):
num = int(str_num,8)
bit = []
while True:
if num == 0: break
num,rem = divmod(num,2)
bit.append(str(rem))
return ''.join(bit[::-1])
#八进制to二进制
def oct2bin(str_num):
num = int(str_num,8)
bit = []
while True:
if num == 0: break
num,rem = divmod(num,2)
bit.append(str(rem))
return ''.join(bit[::-1])
运行结果
'''
下面两句是一样的
str(obj,encoding=‘utf-8’,errors=‘strict’)
''.encode(encoding=‘utf-8’,errors=‘strict’)
'''
#使用ord的二进制值,即2个字节的unicode
In[70]: ord('中')
Out[70]: 20013
In[73]: dec2bin(str(ord('中')))
Out[73]: '100111000101101'
#使用utf-8的二进制值,即可变长的unicode
In[75]: dec2bin(str('中'.encode('utf-8').hex()))
Out[75]: '111001001011100010101101'
#以上函数有重复造轮子的嫌疑
In[15]: '中'.encode() #先转换成16进制的bytes
Out[15]: b'\xe4\xb8\xad'
In[16]: '中'.encode().hex() #然后去除16进制的标识'b'和'\x'
Out[16]: 'e4b8ad'
In[17]: int('中'.encode().hex(),16) #16进制转换成10进制
Out[17]: 14989485
In[18]: bin(int('中'.encode().hex(),16)) #10进制转换成2进制
Out[18]: '0b111001001011100010101101'
#以上是中文字符转换成2进制的方法
##################################################