python3 用10进制的思维做16进制数据递增

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3 用10进制的思维做16进制数据递增相关的知识,希望对你有一定的参考价值。

参考技术A # 记录思维:用10进制递增后,用hex()转16进制保存;

# 若起始值是16进制,可以先转10进制递增后,再转回16进制

initA =0

for iin range(251):

    initA = initA+1

    b =hex(initA).upper()

 #  逐个写入excel表,excel表创建、写数据、保存,见 https://www.jianshu.com/p/17f96366a25c

    data_sheet.cell(column=1,row=i+2,value=b)   

 #  也可以保存在list

# 问题:在2个16进制数之间递增:

# 1、只需将值视为整数

start=0x30D681    # hex literal, gives us a regular integer

end =0x3227FF

# 2、如果开始值和结束值是以十六进制字符串形式输入的,请先使用int(hexvalue, 16)将它们转换为整数

start =int('30D681',16)

end =int('3227FF',16)

# 使用format(value, 'X')将其显示为十六进制

for i in range(start, end +1):

     print(format(i,'X'))

基本数据类型—数字

布尔型

bool型只有两个值:True和False

之所以将bool值归类为数字,是因为我们也习惯用1表示True,0表示False。

整型

Python中的整数属于int类型,默认用十进制表示,此外也支持二进制,八进制,十六进制表示方式。

进制转换

尽管计算机只认识二进制,但是为了迎合我们的习惯,python中的数字默认还是十进制。还提供了一些方法来帮助我们做转换。比如是进制转换为二进制使用bin方法,在转换结果前面还会加上‘0b’表示是一个二进制书。

既然十进制可以转换为二进制,那么其实使用同样的原理也可以转换为其他进制,python也为我们提供了十进制转换成八进制和十六进制的方法,分别是oct和hex。八进制前面以‘0o’标示,十六进制以‘0x’标示

>>> bin(10)
‘0b1010‘
>>> oct(10)
‘0o12‘
>>> hex(10)
‘0xa‘

取余运算(%)

>>> 5%2
1
>>> 16%4
0
>>> 16%7
2

算术运算(+ - * / // divmod **)

>>> 2+3
5
>>> 2-3
-1
>>> 2*3
6
>>> 3/2
1.5
>>> 3//2
1
>>> divmod(16,3)
(5, 1)
>>> 2**3
8

浮点型

技术图片

浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学计数法

好了,我们来解释上面那句装。。。的话:

Python的浮点数就是数学中的小数(alex一定要强调float是有限小数或无限循环小数,就好像谁真的关心似的)。

在运算中,整数与浮点数运算的结果也是一个浮点数。

为什么要叫做float浮点型?

浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,
一个浮点数的小数点位置是可变的,比如,
1.23*109和12.3*108是相等的。
浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代:
1.23*109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。
整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的而浮点数运算则可能会有四舍五入的误差。

关于小数不精准问题

Python默认的是17位精度,也就是小数点后16位,尽管有16位,但是这个精确度却是越往后越不准的。

首先,这个问题不是只存在在python中,其他语言也有同样的问题

其次,小数不精准是因为在转换成二进制的过程中会出现无限循环的情况,在约省的时候就会出现偏差。

比如:11.2的小数部分0.2转换为2进制则是无限循环的00110011001100110011...

单精度在存储的时候用23bit来存放这个尾数部分(前面9比特存储指数和符号);同样0.6也是无限循环的;

这里有一个问题,就是当我们的计算需要使用更高的精度(超过16位小数)的时候该怎么做呢?

#借助decimal模块的“getcontext“和“Decimal“ 方法
>>> a = 3.141592653513651054608317828332
>>> a
3.141592653513651
>>> from decimal import *
>>> getcontext()
Context(prec=50, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[FloatOperation], traps=[InvalidOperation, DivisionByZero, Overflow])
>>> getcontext().prec = 50
>>> a = Decimal(1)/Decimal(3)#注,在分数计算中结果正确,如果直接定义超长精度小数会不准确
>>> a
Decimal(‘0.33333333333333333333333333333333333333333333333333‘)

>>> a = ‘3.141592653513651054608317828332‘
>>> Decimal(a)
Decimal(‘3.141592653513651054608317828332‘)
#不推荐:字符串格式化方式,可以显示,但是计算和直接定义都不准确,后面的数字没有意义。
>>> a = ("%.30f" % (1.0/3))  
>>> a  
‘0.333333333333333314829616256247‘

复数

从上面的图中我们就可以看出,复数complex是由实数和虚数组成的

要了解复数,其实关于复数还需要先了解虚数。虚数(就是虚假不实的数):平方为复数的数叫做虚数。

复数是指能写成如下形式的数a+bi,这里a和b是实数,i是虚数单位(即-1开根)。在复数a+bi中,a称为复数的实部,b称为复数的虚部(虚数是指平方为负数的数),i称为虚数单位。

当虚部等于零时,这个复数就是实数;当虚部不等于零时,这个复数称为虚数。

注,虚数部分的字母j大小写都可以。

以上是关于python3 用10进制的思维做16进制数据递增的主要内容,如果未能解决你的问题,请参考以下文章

16进制

用python怎么发送tcp协议的16进制数据包

Python3---内置函数---hex()

Python3 基本类型

C++ string2进制转16进制要怎么做

用C语言将16进制数转化为10进制数 16进制数以字符串形式输入 最好运用数组 谢谢