1.Unicode编码问题

因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字 节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),0 - 255被用来表示大小写英文字母、数字和一 些符号,这个编码表被称为ASCII编码,比如大写字母 A 的编码是65,小写字母 z 的编码是122。

如果要表示中文,显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。

类似的,日文和韩文等其他语言也有这个问题。为了统一所有文字的编码,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。

Unicode通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以。

如果中文字符串在Python环境下遇到 UnicodeDecodeError,这是因为.py文件保存的格式有问题。可以在第一行添加注释

# -*- coding: utf-8 -*-

目的是告诉Python解释器,用UTF-8编码读取源代码。

2.函数

ord(x):返回unicode字符对应的整数。

bin(x):将一个整形数字转换成二进制字符串。

>>> ord('a')
97
>>> bin(97)
'0b1100001'
>>> bin(ord('a'))
'0b1100001'
>>> bin(ord('a'))[2:]
'1100001'

 int(x, base=10):x -- 字符串或数字;base -- 进制数,默认十进制;返回整型数据。

 3.运算符

&:按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0。

|:按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。

^:按位异或运算符:当两对应的二进位相异时,结果为1。

~:按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -x-1。

<<:左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。

>>:右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数

a = 60            # 60 = 0011 1100 
b = 13            # 13 = 0000 1101 
c = 0
 
c = a & b;        # 12 = 0000 1100
c = a | b;        # 61 = 0011 1101 
c = a ^ b;        # 49 = 0011 0001
c = ~a;           # -61 = 1100 0011
c = a << 2;       # 240 = 1111 0000 
c = a >> 2;       # 15 = 0000 1111