python-1:Number数字类型 之二 相关函数 int.from_bytes,int.to_bytes()

函数格式:int.from_bytes(bytes, byteorder, *, signed=False)

简单demo:

[python] view plain copy

  1. <code class="language-python">s1 = b‘\xf1\xff‘
  2. print(int.from_bytes(s1, byteorder=‘big‘, signed=False))
  3. print(int.from_bytes(s1, byteorder=‘little‘, signed=True))
  4. </code>

输出:61951
          -15

参数解释: bytes是要转换的十六进制;

byteorder:选‘big‘和‘little‘,以上例为例,其中big代表正常顺序,即f1ff。little反之,代表反序fff1;

signed:选True、Flase表示是否要区分二进制的正负数含义。即是否要对原二进制数进行原码反码补码操作。

在分析demo的转换原理前我们首先要知道原码、补码、反码的知识:

原码:为了表示负数.(改变开头位数字表示正负,1为负,0为正)

我们都知道1的二进制数为0001,那-1呢?为了表示负数,规定了如果开头那个数字如果是1就代表负数,即-1的二进制

数原码为1001

反码:为了处理负数.(将负数的原码除了开头位全部由0变1或者由1变0)

我们都知道1+(-1)=0,但是二者的二进制数 0001+1001=1010,结果是-2,这不是我们想要的,所以出现了反码

反码,顾名思义就是“反着来”,把0变成1,1变成0,反的是负数的原码,即-1的反码 1001 变成了1110。

这时候1+(-1)-> 0001 +1110=1111,再将结果1111从反码返回成原码即1000(-0),就是我们希望得到的数0.

注意:负数原码最开头表示数字正负的那个数字位 ”1“ 不需要进行反码操作。

补码:为了处理-0与+0同时存在问题. (对反码进行+1操作,如果最高位/开头位被”溢出“,则舍去)

-0的原码是1000,反码是1111,如果+1,则它的补码是10000,如果这是四位字长的二进制存放位,就要把1舍去

,即-0的补码变成了0000,这是我们希望的不分正负的0的表示方式,解决了+0\-0同时存在问题。

相应的,当3+(-3)的时候,有0011 + 1101(1100的补码) =10000,舍去最高为1,即结果为0000,是我们希望的

demo分析:f1转换成二进制是1111 0001  ,ff 则为1111 1111

(1) 在第一行print中,我们参数选择的是big正序,false不分正负符号,即:

直接转换正序 f1ff 二进制:1111 0001 1111 1111 转换为十进制:61951

(2)在第二行print中,我们参数选择的是little反序,true代表区分正负符号,即:

首先转换 f1ff 为反序 fff1 ,反序的二进制有:1111 1111 1111 0001

由于我们选择了true,所以要区分二进制的正负数含义:

原码1111 1111 1111 0001最高位(开头位)是1,即此二进制数为负数。

再进行反码操作,即有 1000 0000 0000 1110

再进行补码操作,有1000 0000 0000 1111

由于最高位1(开头位)不进行二进制转换计算,所以我们将除了最高位1(表示负数)以外

数字进行二进制转换十进制操作,即000 0000 0000 1111的十进制为15,即最后结果为-15.

**************************************************************************************************************************************************************

1.int.from_bytes函数

  • 功能:res = int.from_bytes(x)的含义是把bytes类型的变量x,转化为十进制整数,并存入res中。其中bytes类型是python3特有的类型。
  • 函数参数:int.from_bytes(bytes, byteorder, *, signed=False)。在IDLE或者命令行界面中使用help(int.from_bytes)命令可以查看具体介绍。bytes是输入的变量;byteorder主要有两种:‘big‘和‘little‘;signed=True表示需要考虑符号位。
  • 举例说明:int_s  = int.from_bytes(s, byteorder=‘little‘, signed=True),其中s=‘\xf1\xff‘,则输出int_s=-15。分析一下过程,‘\x‘表示十六进制数,先把‘f1‘写成二进制数:1111 0001,‘ff‘同上:1111 1111.由于s的高低位标志是‘little‘,即‘f1‘是低位,‘ff‘是高位,所以正确的顺序应该是‘fff1‘,即11111111 1111 0001.又因为要考虑符号位,第一位是1,所以s是负数,要进行取反加一才是正确的十进制数(第一位符号位的1不变),可以得到10000000 00001111,写成十进制,就是-15,也就是int_s的结果。上面的例子中,如果signed=False,则无符号位;若byteorder=‘big‘,则输入s的左边是高位,右边是低位。
    1. >>> s1 = b‘\xf1\xff‘
    2. >>> print(int.from_bytes(s1, byteorder=‘little‘, signed=True))
    3. -15
    4. >>> print(int.from_bytes(s1, byteorder=‘big‘, signed=False))
    5. 61951
    6. >>> s2 = b‘\xff\xf1‘
    7. >>> print(int.from_bytes(s2, byteorder=‘little‘, signed=False))
    8. 61951

2.int.to_bytes函数

功能:是int.from_bytes的逆过程,把十进制整数,转换为bytes类型的格式。

原文地址:https://www.cnblogs.com/Zhouzg-2018/p/9662897.html

时间: 2024-07-31 13:33:28

python-1:Number数字类型 之二 相关函数 int.from_bytes,int.to_bytes()的相关文章

python第二周 数字类型

数字类型 Python中,数字并不是一个真正的对象类型,而是一组类似类型的分类.Python不仅支持通常的数字类型(整数和浮点数),而且能够通过常量去直接创建数字以及处理数字的表达式,还通过模块和第三方库提供更多的数字类型支持.Python数字类型的完整工具包括: 整数和浮点数 复数(需要模块支持) 固定精度的十进制数 有理分数 集合 布尔类型 无穷的整数精度 各种数字内置函数和模块 处理数字对象的工具: 表达式操作符:+.-.*././/.>>.**.& 内置数学函数:pow.abs

javascript类型系统——Number数字类型

× 目录 [1]定义 [2]整数 [3]浮点数[4]科学记数[5]数值精度[6]数值范围[7]特殊数值[8]转成数值[9]实例方法 前面的话 javascript只有一个数字类型,它在内部被表示为64位的浮点数,和java的double数字类型一样.与其他大多数编程语言不同的是,它没有分离出整数类型,所以1和1.0的值相同.这提供了很大的方便,避免了一大堆因数字类型导致的错误 数字Number是javascript中基本的原始数据类型,同时javascript也支持Number对象,它是一个原始

Python 数据类型 之 数字类型

python的数字类型有:int,long,float,complex,bool (0:False, 1:True) Python的整数没有大小限制,而某些语言的整数根据其存储长度是有大小限制的 计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等 浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是完全相等的.对于

Python数据结构之数字类型

数字类型 种类 数字类型的关系 数字类型转换 数字运算 数学函数 随机数函数 三角函数 数学常量 一.种类 整数型(int) 整数型定义上也可成短整型,理论上有范围的限制,取值范围为:在32位机器上int的范围是:  -2**31-2**31-1,即-2147483648-2147483647 在64位机器上int的范围是: -2**63-2**63-1,即-9223372036854775808-9223372036854775807,如果超过这个范围就可以使用长整型,不过必须在结尾写上大写的

python中,数字类型计算

说明: 今天在看python数字类型的操作,在此记录下. 操作过程: 1.数字的加减乘除 >>> 2 + 24>>> 4 - 22>>> 2 - 4-2>>> 2 * 24>>> 2 / 2 #除法的结果会返回小数的结果,如果是整除,小数点后面就是01.0>>> 1 / 30.3333333333333333 #1除以3除不尽,小数点后面是无限循环.>>> 2 / 0Traceba

Python入门之数字类型运算

Python数字类型有整数类型了.浮点数类型和复数类型.分别对应整数.实数和复数. 整数:    除十进制以外,其他进制需要前加引导符号如:二进制(bit)0b101 或 0B101:八进制(octonary)0o711 或 0O711:十六进制(hexadecimal) 0xABC  或 0XABC 本节课此部分还介绍了pow()函数. 浮点数:所有浮点数必须带有小数部分,浮点数有十进制表示和科学计数法表示.科学计数法形式<a>e<b> = a*10b 如4.3e-3 = 0.0

Python数据类型-2 数字类型

数字类型 数字类型是不可变类型.所谓的不可变类型,指的是类型的值一旦有不同了,那么它就是一个全新的对象.数字1和2分别代表两个不同的对象,对变量重新赋值一个数字类型,会新建一个数字对象. 还是要强调一下Python的变量和数据类型的关系,变量只是对某个对象的引用或者说代号.名字.调用等等,变量本身没有数据类型的概念 .只有1,[1,2],"hello"这一类对象才具有数据类型的概念. Python 支持三种不同的数字类型,整数.浮点数和复数. 整数 通常被称为整型,数值为正或者负,不带

JS number数字类型

number:正数.负数.0.小数.NaN NaN:not a number 不是一个有效数字 但是 他是一个属于number数据类型的 var num = 12; 12==12 比较 var  a= 12 赋值; isNaN():检测一个值是否为有效数字的命题是否成立,是有效数字返回false,不是有效数字返回的才是true: 如果检测的值不是number类型的,浏览器会默认的把它转化成number类型,然后在判断是否为有效的数字 console.log(isNaN("123"))

Python中的变量及数字类型

一.Python中的变量与注释 1.变量 1.1 创建变量 在Python中使用"="来进行变量的创建,不需要声明变量的数据类型. message = "Hello World!" print(message) 这里的变量都存储了一个值—与变量相关联的信息. 例: x = 4 x = 5 在解释器中在定义变量时会在内存中创建两个对象一个为4,另一个为5.这里的x好比一个标签,当x = 4时其贴在4上,通过x即可调用4这个对象,而当x = 5时x又贴在5上,通过x调用