重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

PYTHON中bit函数 python bits

python的字符转bit流问题问题

十六进制的字符串倒是有现成的函数,bytearray.fromhex就可以转换,二进制的就只有你自己解析了。

创新互联建站是一家集网站建设,通州企业网站建设,通州品牌网站建设,网站定制,通州网站建设报价,网络营销,网络优化,通州网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

将字符串每4个字符,进行处理,转换成0~F的16进制字符,然后再用bytearray、bytes的fromhex转换

说实话我没搞懂为啥要弄成二进制字符串,这不是浪费空间么,用文本表示,都是用的HEX字符串或者BASE64

Python中bit与hex的转换

上一次我们说到了Hex与Bytes的转换,很快我们又遇到了bit位的判断。

场景如下:我们需要判断DTC_Status的8个bit中任意一个或几个bit的状态。假设DTC_Status=0x2F,我们需要判断bit0和bit3是否为1.

解决这个问题的方法有很多。程序员往往喜欢用bit移位后与上0或1来进行判断。

但我总觉得这种方法不够直观,所以我通常会将每一个Bit都展开后,再去判断。

下面写一下大致的思路。

转换后,DTC_Status已经是一个字符串了,其中包含了8个bits的0,1状态。

有了这个函数后,我们就可以用bits_compare(DTC_Status , 'xxxx1xx1')的方式来判断DTC_Status了。x代表不需要判断的位。

这里也顺便提下,有时,我们也需要将一个二进制的值,如:'00001001' 转为十进制或十六进制。

此时,我们可以用int,加参数2来实现。通过字符串的切片操作,我们也可以更改某个bit的值。

python中的进制转换和原码,反码,补码

python中的进制转换和原码,反码,补码

计算机文件大小单位

b = bit 位(比特)

B = Byte 字节

1Byte = 8 bit #一个字节等于8位 可以简写成 1B = 8b

1KB = 1024B

1MB = 1024KB

1GB = 1024MB

1TB = 1024GB

1PB = 1024TB

1EB = 1024PB

进制分类

二进制:由2个数字组成,有0 和 1 python中标志:0b

八进制:由8个数字组成,有0,1,2,3,4,5,6,7 python中标志:0o

十进制:有10个数字组成,有0,1,2,3,4,5,6,7,8,9 python中标志:无

十六进制:有16个数字组成,有0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f(进制字母大小写都可以,分别代表10,11,12,13,14,15) python中标志:0x

python中的进制转换:

其他进制转换为十进制:int(相应进制)

其他进制转换为二进制:bin(相应进制)

其他进制转换为八进制:oct(相应进制)

其他进制转换为十六进制:hex(相应进制)

二进制 转化成 十进制:

例: 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

八进制 转化成 十进制:

例: 0o127

运算:7*8^0 + 2*8^1 + 1*8^2 = 7+16+64 = 87

十六进制 转化成 十进制:

例: 0xff

运算:15*16^0 + 15*16^1 = 255

十进制 转化成 二进制:

426 = 0b110101010

运算过程: 用426除以2,得出的结果再去不停地除以2,

直到除完最后的结果小于2停止,

在把每个阶段求得的余数从下到上依次拼接完毕即可

十进制 转化成 八进制:   

426 = 0o652

运算过程: 用426除以8,得出的结果再去不停地除以8,

直到除完最后的结果小于8停止,

在把每个阶段求得的余数从下到上依次拼接完毕即可

十进制 转化成 十六进制:   

运算过程: 用426除以16,得出的结果再去不停地除以16,

直到除完最后的结果小于16停止,

在把每个阶段求得的余数从下到上依次拼接完毕即可。

相关推荐:《Python视频教程》

原码,反码,补码

实际人们看到的数字是原码转化之后显示出来的。

而原码是通过补码得到的。

计算机的所有数据在底层都是以二进制的补码形式存储。

***进制转换的时候需要先把内存存储的补码拿出来变成原码在进行转换输出***

反码:二进制码0变1,1变0叫做反码,反码用于原码补码之间的转换。

补码:用来做数据的存储运算,可以实现计算机底层的减法操作,因而提出(可以表达出一个数的正负)。

也就是说默认计算机只会做加法,例:5+(-3) = 5 - 3。

乘法除法是通过左移和右移 来实现。

正数高位补0,负数高位补1。

正数:

原码 = 反码 = 补码

负数:

反码 = 原码取反(除高位)

补码 = 反码加1

反码 = 补码减1

原码 = 反码取反(除高位)

我们会发现,在取反前减1和在取反后加1的效果是一样的,这就和-2-1 = -(2+1)一个道理,所以会得出这样的规律:

原码 = 补码取反加1

补码 = 原码取反加1

一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 叫符号位正数为0, 负数为1。

比如

正数1在计算机中的存储即为

0 00000000000000000000001

负数1 在计算机中的存储即为

1 00000000000000000000001

一个正数,转换为二进制位就是这个正数的原码。负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码。

正数的反码就是原码,负数的反码等于原码除符号位以外所有的位取反。

正数的补码与原码相同,负数的补码为 其原码除符号位外所有位取反(得到反码了),然后最低位加1。

所以原码,反码,补码正数情况下是一致的,负数情况下是不一致的。

计算机的运算过程实际就是补码相加的一个过程。

比如-2 + 3

-2 的原码为

1 000000000000000000000000010

反码为:

1 111111111111111111111111101

补码为:

1 111111111111111111111111110

3的原码为

0 000000000000000000000000011

反码为:

0 000000000000000000000000011

补码为:

0 000000000000000000000000011

那么二者补码相加结果为

1 111111111111111111111111110

+

0 000000000000000000000000011

=

10 000000000000000000000000001(计算机存储为32位,故前面溢出的1被舍弃,高位为0)

0 000000000000000000000000001

结果为1

再比如-2 + 1

-2 的原码为

1 000000000000000000000000010

反码为:

1 111111111111111111111111101

补码为:

1 111111111111111111111111110

1的原码为

0 000000000000000000000000001

1的反码为:

0 000000000000000000000000001

1的补码为:

0 000000000000000000000000001

二者的补码相加结果为

1 111111111111111111111111110

+

0 000000000000000000000000001

=

1 111111111111111111111111111

得出的补码转化为原码, 最低位减一得到反码,然后除符号位外所有位取反,得到结果

1 000000000000000000000000001

结果为1


网页题目:PYTHON中bit函数 python bits
本文来源:http://cqcxhl.cn/article/dogphsp.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP