十进制和二进制

十进制 二进制

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进制的方法
##################################################
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 二进制表示一般用原码表示,计算加减时用补码表示。这里的二进制小数是用的定点数表示,不是用浮点数表示的。 0X01 ...
    codingriver阅读 2,274评论 0 0
  • (一)、进制之间的转换 八进制:0-7 十六进制:0-F 1、十进制 与 二进制之间的转换 (1)、十进制转换为二...
    MPPC阅读 22,032评论 2 49
  • 企业团队可根据人数及规模大小来确定组织模式。创业初期,要用信任将每个人都融合在一起,主要是心与心的碰撞,要用羽毛球...
    伊森田慧慧阅读 349评论 0 1
  • 1 陈永远也忘不了那场演唱会和伍的那场离别。去体育馆的时候,陈买了五月天的票,那是第二人生的发表会,从中午一直等到...
    了下阅读 265评论 0 0
  • 是啊,都已经三年了,十七八岁的年纪,卉都在喜欢那样一个人,她同样也喜欢一个歌手,因为两个人在她心里很像,所以她分不...
    姜姜说阅读 131评论 0 0