二进制

为什么计算机编程语言中:0.1+0.2不等于0.3

浪尽此生 提交于 2020-03-27 02:59:36
最近在学习JS过程中发现在计算机JS时发现了一个非常有意思事,0.1+0.2的结果不是0.3,而是0.30000000000000004,但先将小数做乘法然后相加,再除回来就得到想要的0.3 我用python试了一下,发现python也是一样的,结果也是0.30000000000000004。 然后我开始信息搜集,最后找到了答案。想知道这其中的原因,要先理解这些点:二进制、指数形式、IEEE 754标准。 1、二进制 在计算机中所有的数据都是二进制形式存储的,包括整数、浮点数以及其他所有类型的数据。我们将十进制的0.1以及0.2转换成二进制 转换的方法也比较简单,整数转换成二进制:就是用整数除以2然后从下往上取余数,下图用100举例 然后小数转换成二进制就是,小数部分无限乘以2,然后顺序取整。下图用0.375举例 2、指数形式 用指数方式表示可以在有限的空间里存储更大的数值。 所有的十进制数都可以用指数形式表示,成为D=M*10 E ,比如100可以表示为1*10 2 。 二进制数也可以用指数形式表示,B=M*2 E 的形式,这里的E为指数,M为B的位数。比如0.011可以表示为1.1*10 -10 ,这里的“-10”表示的是-2。 3、浮点数IEEE754标准 JavaScript中所有数字包括整数和小数都只有一种类型,是遵循 IEEE 754 标准,使用64位固定长度来表示

IPv6 基础

泪湿孤枕 提交于 2020-03-26 23:46:44
一、IPv6 地址概念介绍   IPv6是“Internet Protocol Version6”(互联网协议第6版),用于替代IPv4的下一代IP协议。由于IPv4地址资源有限,制约了互联网的应用和发展。IPv6的使用,不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联网的障碍。 二、IPv6 地址使用的原因   1. IPv4地址枯竭不够使用问题:   根据互联网地址分配的官方组织公告说明,随着IPv4地址诞生以来,使用的人员递增,网络设备的不断增加,IPv4地址已经出现了枯竭不够使用的情况,根据最新公告,地址将在2020年使用耗尽。   2.IPv6地址端到端通讯有局限性:   由于IPv4地址不足,通常使用NAT技术来实现私网地址与公网地址的转换,但这种技术也有局限性,如使用地址加密技术IPsec VPN,就不能使用NAT地址,因此端到端的通讯会受影响,而使用IPv6地址就不用考虑地址不足问题。 三、IPv6 地址优势和特点   1.全局可达性与灵活性   2.网络地址聚合性更高   3.地址的多宿主特性(没有子接口地址概念)   4.地址自动分配方式简单(自动配置地址技术)   5.更容易可以实现端到端通讯 四、IPv6 地址报文    IPv4地址采用32位二进制组成,IPv4地址数据为:2的32次方。   IPv6 地址采用128位二进制组成

[LeetCode] 231. Power of Two

泄露秘密 提交于 2020-03-25 13:47:54
题意很简单,问一个数字n是否是2的几次幂。思路是用位运算做,如果你对位运算很敏感,你会发现,所有2的某次方的数字,转化成二进制之后,都只有一个1。比如 2->0010, 4->0100, 8->1000...... 所以思路是比较n & n-1是否等于0即可。因为如果n是2的某次方,比它小1的数字里面一定是一堆1。 举个例子,16的二进制是10000,15的二进制是01111,两者做AND运算得到0。代码如下, 1 var isPowerOfTwo = function (n) { return n > 0 && (n & (n - 1)) === 0 ; }; 来源: https://www.cnblogs.com/aaronliu1991/p/11675164.html

Unicode utf8等编码类型的原理

穿精又带淫゛_ 提交于 2020-03-25 11:48:07
3 月,跳不动了?>>> 1、ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。 ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。 2、非ASCII编码 英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。 但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样

sql 2005 数据库字段类型说明

狂风中的少年 提交于 2020-03-25 10:53:49
数据类型 类型 描 述 bit 整型 bit 数据类型是整型,其值只能是0、1或空值。这种数据类型用于存储只有两种可能值的数据,如Yes 或No、True 或Fa lse 、On 或Off int 整型 int 数据类型可以存储从- 2 31 (-2147483648)到2 31 (2147483 647)之间的整数。存储到数据库的几乎所有数值型的数据都可以用这种数据类型。这种数据类型在数据库里占用4个字节 smallint 整型 smallint 数据类型可以存储从- 2 15 (-32768)到2 15 (32767)之间的整数。这种数据类型对存储一些常限定在特定范围内的数值型数据非常有用。这种数据类型在数据库里占用2 字节空间 tinyint 整型 tinyint 数据类型能存储从0到255 之间的整数。它在你只打算存储有限数目的数值时很有用。 这种数据类型在数据库中占用1 个字节 numeric 精确数值型 numeric数据类型与decimal 型相同 decimal 精确数值型 decimal 数据类型能用来存储从-10 38 -1到10 38 -1的固定精度和范围的数值型数据。使用这种数据类型时,必须指定范围和精度。 范围是小数点左右所能存储的数字的总位数。精度是小数点右边存储的数字的位数 money 货币型 money 数据类型用来表示钱和货币值

python 核心编程 第九章

廉价感情. 提交于 2020-03-25 05:42:52
文件的输入和输出 打开文件 使用open()或者file()这两个函数是等效的。 r 以读方式打开 rU 或 Ua 以读方式打开, 同时提供通用换行符支持 (PEP 278) w 以写方式打开 (必要时清空) a 以追加模式打开 (从 EOF 开始, 必要时创建新文件) r+ 以读写模式打开 w+ 以读写模式打开 (参见 w ) a+ 以读写模式打开 (参见 a ) rb 以二进制读模式打开 wb 以二进制写模式打开 (参见 w ) ab 以二进制追加模式打开 (参见 a ) rb+ 以二进制读写模式打开 (参见 r+ ) wb+ 以二进制读写模式打开 (参见 w+ ) ab+ 以二进制读写模式打开 (参见 a+ ) 文件的输入输出 read() 直接读取字节到字符串,读取到给定数目的字节 readline()读取文件的一行(包括行结束符),size参数默认为-1,代表读到行结束符。 readlines()读取所有剩余行,返回一个字符串列表,参数sizhint表示返回最大字节的大小。 truncate()它接受一个可选的 size 作为参数. 如果给定, 那么文 件将被截取到最多 size 字节处. 如果没有传递 size 参数, 那么默认将截取到文件的当前位置. 例如, 你刚打开了一个文件, 然后立即调用 truncate() 方法, 那么你的文件(内容)实际上被删除,

Python采用struct处理二进制

放肆的年华 提交于 2020-03-25 04:46:47
有时需要使用python二进制数据,实例,件。socket操作时.这时候。能够使用python的struct模块来完毕.能够用 struct来处理c语言中的结构体. struct模块中最重要的三个函数是pack(), unpack(), calcsize() pack(fmt, v1, v2, ...) 依照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) unpack(fmt, string) 依照给定的格式(fmt)解析字节流string,返回解析出来的tuple calcsize(fmt) 计算给定的格式(fmt)占用多少字节的内存 struct中支持的格式例如以下表: Format C Type Python 字节数 x pad byte no value 1 c char string of length 1 1 b signed char integer 1 B unsigned char integer 1 ? _Bool bool 1 h short integer 2 H unsigned short integer 2 i int integer 4 I unsigned int integer or long 4 l long integer 4 L unsigned long long 4 q long long long 8 Q

转自

别来无恙 提交于 2020-03-25 03:40:05
有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. struct模块中最重要的三个函数是pack(), unpack(), calcsize() pack(fmt, v1, v2, ...) 按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) unpack(fmt, string) 按照给定的格式(fmt)解析字节流string,返回解析出来的tuple calcsize(fmt) 计算给定的格式(fmt)占用多少字节的内存 struct中支持的格式如下表: Format C Type Python 字节数 x pad byte no value 1 c char string of length 1 1 b signed char integer 1 B unsigned char integer 1 ? _Bool bool 1 h short integer 2 H unsigned short integer 2 i int integer 4 I unsigned int integer or long 4 l long integer 4 L unsigned long long 4 q long long long

Python使用struct处理二进制

走远了吗. 提交于 2020-03-25 03:33:19
有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. struct模块中最重要的三个函数是pack(), unpack(), calcsize() pack(fmt, v1, v2, ...) 按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) unpack(fmt, string) 按照给定的格式(fmt)解析字节流string,返回解析出来的tuple calcsize(fmt) 计算给定的格式(fmt)占用多少字节的内存 struct中支持的格式如下表: Format C Type Python 字节数 x pad byte no value 1 c char string of length 1 1 b signed char integer 1 B unsigned char integer 1 ? _Bool bool 1 h short integer 2 H unsigned short integer 2 i int integer 4 I unsigned int integer or long 4 l long integer 4 L unsigned long long 4 q long long long

两个与位运算有关的小问题

跟風遠走 提交于 2020-03-24 08:01:15
两个与位运算有关的小问题 在读《编程之美》一书时,书中提到两个小问题: 1.如何求算N!的二进制表示最低位1的位置。 2.如何用最简便最快的方法判断一个正整数是否是2的方幂。 对于第一个问题:对于任何一个整数n,当表示成二进制时,若最低位为1,则该数肯定是奇数,否则为偶数。若是奇数,则n肯定不含质因子2.例如9的二进制形式是1001,最后一位位1,则肯定不含因子2,而12的二进制形式是1100,则肯定含因子2.但是将1100右移2位就变成0011,即将12除以2^2,此时0011为奇数。从这里可以发现一个规律,要求一个数的二进制表示形式最低位1的位置,相当于求算n有多少个因子2。因为假如一个整数表示成二进制是r0r1r2.....rk.....rn,如果rk是最低位为1的位置,那么从r(k+1)到rn都为0,此时将其右移(n-k)位,则rk在最低位,此时该二进制必定不包含因子2,而将二进制右移1位相当于除以2,即求算rk的位置相当于求算因子2的个数。而求算N!中含有2的个数很容易求算。 int location(int n){ int low=0; while(n) { low+=n>>1; n>>=1; } return low;} 对于第二个问题:如果一个整数是2的方幂,即能表示成2^n的形式,则表示成二进制必然是rn.....rk....r1r0,rn为1,其他所有的位都为0