首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

神奇二进制(一)

我们中国人过去即使不识字的人,也背诵九九乘法表,但是换成二十进制,那要背可就是19*19围棋表了: image.png 即使是现代人也背不下,何况那时候雅玛人,这也许也是雅玛文明发展缓慢原因之一...那计算机为什么不用十进制,而采用二进制呢?原因很简单,因为计算机不是人。。。...不能这么粗暴比较,但是简单东西往往更高级,我们现在用电脑看网页,听得音乐,看视频,玩游戏,这背后一切信息都是一串串0和1组合变化而来,是不是很神奇?...二进制十进制,就是二进制基数2乘以位置对应幂次方,然后累加就等于十进制了,下面的例子详细展示了转换过程。 二进制整数转十进制整数 image.png 二进制小数如何转成十进制呢?...计算机信息最适合用二进制表示 2. 二进制数以2为基数,乘以对应幂次方累加就能转换十进制数 3. 负数在二进制中用补码表示

47520

JavaScript 浮点数之迷:0.1 + 0.2 为什么不等于 0.3?

你可能在哪里见过 “0.1 + 0.2 = 0.30000000000000004” 但是知道这背后真正原理?是只有 JavaScript 中存在吗?...带着这些疑问本文将重点梳理这背后原理及浮点数在计算机中存储机制。 通过本文你学到什么? 浮点数先修知识,更好帮你理解本文知识 IEEE 754 标准是什么?...计算机世界中是否有减法?1 - 1 是如何实现? 2. 十进制数 1 二进制为 0000 0001,-1 对应二进制是什么?用 1000 0001 表示 -1 对?...1. “0.1” 转为二进制 不知道怎么转换,参考上面 先修知识 十进制小数转二进制 0.000110011001100110011(0011) // 0011 将会无限循环 2....最后做个总结,由于计算机底层存储都是基于二进制,需要事先由十进制转换二进制存储与运算,这整个转换过程中,类似于 0.1、0.2 这样数是无穷尽,无法用二进制数精确表示。

3.8K31
您找到你想要的搜索结果了吗?
是的
没有找到

计算机只会加法,那么它如何用加法来计算减法呢?

计算机中加减乘除都是通过加法实现,那么你肯定很好奇,加法和减法是完全不同操作啊,如何用加法来进行减法运算呢?下面我就通过几个例子,来解释一下具体操作过程。...为了避免借位,我们在多加一个1,999+1=1000 凑成 1000,然后减去1000,这样从头到尾就不会涉及借位问题。...想来想去都想不到啊,不知道你有没有发现,计算机是没有减法运算,计算机减法是通过加法实现,那么加法怎么达到减法效果呢?...「原来二进制负数表示叫做补码,补码转换规则是正数取反再加1」,比如:00000001 取反就是 11111110,然后再加1就是11111111,这就是-1二进制表示了。...❞ 二进制减法 好了,我们知道了补码概念之后,再来看看二进制减法。 大数减小数 251-174 转换二进制就是 11111011 - 10101110 ,还记得我们上面不用借位公式

1K20

从强转 byte 说起

要搞清楚上面 Java 代码运算逻辑,我们首先要做是将对我们人脑直观十进制数字转换成对计算机直观二进制,这里就用到了一个概念叫比特位(bit),这是计算机最小存储单元了,表示二进制存储位。...布衣博主画了一份草图,来将上文中十进制转换二进制比特存储位,这里先以十进制 256 为例: ?   ...——这也是带符号位二进制能够多表示一个数原因。下面是博主探究二进制运算过程中画原码和补码计算结果差异图: ?   ...在十进制中,如果两个数相加凑成十或成百整数,我们就可以把其中一个数叫另一个数补数,因此可以说 4 和 6 互为补数;同样对于二进制来说,我们也是可以凑个整数,凑整就有补数,而补数对于运算往往大有帮助...原因,由此可见,在带符号二进制算数运算中,引入补码,其意思很明确,就是为了统一运算符。

1.6K20

公司同事用float和double,结果导致..

BigDecimal 阿粉相信大家对这个肯定不陌生,只要你公司业务中涉及一些比较精确数字时候,都会使用 BigDecimal,而不会去使用 Float 和 double,并且在数据库做设计时候...阿粉来解释一下。...也就是说,我们传递给计算机十进制数据,但是计算机需要先把我们给数据转换二进制数据,因为不能直接识别十进制数据,这时候,2.0 是十进制数据,转换二进制数据,而1.4呢?...转换二进制数据反而出现了问题 1.4在二进制中,则是会出现1.399999。。。这样数据,当我们进行数据转换时候,就出现了2.0-1.399999这样数据。...这个时候就有人问了,我定义 float 类型为 1.4 时候为什么不是 1.399999999呢?这就是不进行浮点计算时候,在十进制里浮点数正确显示。

77940

浅谈JavaScript操作符和隐式转换

avaScript提供了很多原生好用操作符,在开发过程中如果合理使用肯定能达到事半功倍效果。...我们目标是少些一个字符,绝不多写 背景在日常开发中,我们经常会遇到需要检查字符串中是否包含某个子串情况。通常做法是使用indexOf()方法,并与-1比较,但这种方法在可读性方面并非最佳。...我们来看看其背后隐式转换和~操作符原理。不存在时得到结果是: ~-1step1....二进制十进制转换取反后得到是一个新二进制数,但这个二进制数以1开头,表示它是一个负数。在计算机中,负数通常使用补码形式表示,所以我们需要将这个二进制转换为它补码对应十进制数。...,它对应十进制数是-4。

14321

编程一样可以很带感--1+1不一定等于“2”

高中学过,计算机是硅构成,不知道有没有人想过是怎么个用硅构成法,另外我们在物理上还学过一个二极管东西,正向导电,反向不能导电,二极管发明对计算机是有重大意义。...我们来进行二进制十进制换算,我们将每一位数字乘以该位权,比如说10,我们用0乘以它权1,1乘以它权2一次方,得到十进制数字2,依次类推。     十进制怎么转换二进制呢?...就是将一个十进制数不停除以二除全部除尽或者商为一为止,举个例子,比如说25,除以2,余1得商为12,再拿这个12除以2,余0商6,再拿这个6除以2,余0商3,再拿3除,余1商1,不能再除了,要打住了...,可以研究一下为什么这个算法是这样原因。    ...,有人问了那9以后怎么表示,915分别用字母A,B,C,D,E,F表示,比如说一个数FF那就代表255,怎么算,参考二进制权重,十六进制权重是16n次方,参考二进制方法就能化成十进制数,那二进制和十六进制怎么转换

91360

关于二进制世界秘密

我们一般在软件开发中用十进制数表示逻辑运算等,也会被计算机转换二进制数处理。对于二进制数,计算机不会区分他是 图片、音频文件还是数字,这些都是一些数据结合体。...为了说明这个问题,我们先把 00100111 这个数转换十进制数看一下,二进制转换十进制数,直接将各位置上值 * 位权即可,那么我们将上面的数值进行转换 ?...二进制十进制表示图 也就是说,二进制数代表 00100111 转换十进制就是 39,这个 39 并不是 3 和 9 两个数字连着写,而是 3 * 10 + 9 * 1,这里面的 10 , 1 就是位权...移位过程 上述例子中还是以 39 为例,我们先把十进制39 转换二进制 0010 0111,然后向左移位 <<一个字节,也就变成了 0100 1110,那么再把此二进制转换十进制数就是上面的78...可能很多人会这么认为:因为 1 二进制数是 0000 0001,最高位是符号位,所以正确表示 -1 应该是 1000 0001,但是这个答案真的对

60120

关于二进制世界秘密

我们一般在软件开发中用十进制数表示逻辑运算等,也会被计算机转换二进制数处理。对于二进制数,计算机不会区分他是 图片、音频文件还是数字,这些都是一些数据结合体。...为了说明这个问题,我们先把 00100111 这个数转换十进制数看一下,二进制转换十进制数,直接将各位置上值 * 位权即可,那么我们将上面的数值进行转换 ?...二进制十进制表示图 也就是说,二进制数代表 00100111 转换十进制就是 39,这个 39 并不是 3 和 9 两个数字连着写,而是 3 * 10 + 9 * 1,这里面的 10 , 1 就是位权...移位过程 上述例子中还是以 39 为例,我们先把十进制39 转换二进制 0010 0111,然后向左移位 <<一个字节,也就变成了 0100 1110,那么再把此二进制转换十进制数就是上面的78...可能很多人会这么认为:因为 1 二进制数是 0000 0001,最高位是符号位,所以正确表示 -1 应该是 1000 0001,但是这个答案真的对

53420

为什么0.1 + 0.2 不等于 0.3 ?

简单来说,计算机使用基于二进制浮点数,而我们人类使用基于十进制浮点数。...IEEE 754 标准可以参见:https://zh.wikipedia.org/wiki/IEEE_754背后原理在十进制系统中,如果一个分数使用基数(10)质因数来表示,那么它可以被精确地表示。...这个近似值是通过将无限循环二进制小数转换为有限位数浮点数表示来实现。因此,当我们在计算机中进行浮点数运算时,结果可能会有微小误差。...十进制小数转二进制还有一种更容易理解方法(采用 *2 取整法),例如我们要把十进制小数 0.875 转换二进制数,只需将十进制小数部分乘以 2,然后提取整数部分,直到小数部分变为 0。...将上面提取整数部分排列结果 111 变成以二进制表示 .875。二进制数 1101.111 整数部分为 1101 ,小数部分为 111,就是十进制数 13.875 转换二进制结果。

7810

一个有趣BUG

就去查了下elasticdump源码,一番查找后,果然发现有人遇到过同样问题,并已经修复了这个BUG,并给出了解决方案和一些猜测原因。于是这个问题就得到了解决。...位表示指数,52位来表示尾数,因此Js中精确表示最大整数是2^53 (十进制 为 9007199254740992),那么大于这个数(本文中数值长度18位)就可能会丢失精度,因为二进制只有0和1,数值太大...可以在Chrome Console 里面试了一下,果然是这样,(不是超过了表示最大值,而是超过了精确表示最大值),和elasticdump导出数据变化基本类似。...这就涉及了数据精度问题,在这里篇幅有限,就不再展开,有兴趣同学可以自己去查看相关资料,本质上还是十进制小数与二进制小数相互转换产生误差。...有时间和精力,还是需要更深层次去了解缺陷背后逻辑和根因是什么,触类旁通。以避免更多类似的问题发生。

36940

云平台渗透之-python shell获取root权限

)返回值与linux命令返回值关系: 大家都习惯用os.systemv()函数执行linux命令,该函数返回值十进制数(分别对应一个16位二进制数)。...该函数返回值与linux命令返回值两者转换关系为:该函数返回值(十进制)转化成16二进制数,截取其高八位(如果低位数是0情况下,有关操作系统错误码共131个,所以低位都是零),然后转乘十进制数即为...32512,十六位二进制数示为:01111111,00000000,高八位转乘十进制为 127à对应linux命令返回值 127 ...........或者简单说,linux命令返回码 左移8位,然后转换十进制就变成了os.system()函数返回值了。 此外关于linux错误返回码(不含0,0表示成功)代表含义,可以参照文末最后附表。...下面重点来了,能不能通过移位方式来获取可见返回值呢,这里大家可以自己去尝试,涉及进制转换以及移位操作,在此不再赘述。 但是除此之外还有其他办法?答案是肯定

2.7K50

「硬核JS」数字之美

,奥利给~ 可能大家对一些看了立即上手或者是面经类文章更为倾向一些,说实话,你可能瞒过面试官,终究瞒不过自己,应牢记 「技术!...JavaScript ,其他语言也都类似,数字大家表面看来可能很简单,其实从计算机语言本身对数字处理还是比较复杂,望本文能够体现出数字精妙,故而取名 数字之美 二进制 对于计算机只能存储二进制...8 位二进制,那就在转换结果前补 0 即可 如十进制 57 8 位二进制即 00110111,那么可能还会有人为如果是 4 位怎么办呢,4 位是存不了 57 这么大值,溢出了 小数转二进制 可能还有人不了解十进制小数是怎么转二进制...= 0.3 原因,如果尾数不足 52 位则在后面补 0 即可 我们可能会疑惑,为什么除了 0 之外数字转二进制后首位都是 1,比如 0.0101 这种 0 < 值 < 1 二进制小数首位不就是 0...求最大数字值,现在就可以在控制台输出一下,即 1.7976931348623157e+308,和我们估算出来值非常相近(因为为了简单我们把规格化数字约等于了 2 来计算,算出数值其实是大了一点

5.4K20

多数编程语言里0.1+0.2≠0.3?

Significant 是不包含零有效数字数目,base表示所使用进制——在这里是十进制,exponent 表示小数点需要向左或向右移动才能正确表示位置数。...这种格式以64位存储数字,其中数字(小数)存储在第051位,指数存储在第5262位,符号存储在第63位中。 ? 让我们以IEEE754标准表示64位中0.1。...第一步是将十进制0.1转换成等价二进制数。为此,我们先将0.1乘以2,然后将小数点前数字分开,以得到二进制等价值。 ?...在使两者指数相同之后将两者相加会得到: ? 当以浮点表示时,它将变为: ? 这就是0.1+0.2在计算机二进制表示。...把该二进制转换十进制小数,就得到了0.30000000000000004。 这就是隐藏在0.1 + 0.2 = 0.30000000000000004背后原因

79020

将ipv4转成十进制

  很显然,根据乘法原理,是2x2x2x2x2x2x2x2即28次方即256种情况,中学学过二进制十进制转换,二进制00000000和11111111之间256个不同值,对应十进制...于是,对于任意一串32位二进制数,都可以转换为ipv4形式, 如对"01101001 01010001 01111101 00101010", 可以分别计算每段对应十进制数字,中间用"."...制定这套规则,做出这套转换的人类,当然判断得出,但对于计算机,变成ipv4这个鬼样子格式,已经无法"一眼识别"....但人类还是不习惯二进制比较大小,于是会将a,b,c全部转为10进制再做比较, 对于a对应十进制数为1766948138,b为1766948648, c为1766948540,现在,人类能够读懂,c在[...进制转换可借助此网站快速实现,戳此直达[4] (注意去掉中间可能存在空格) 具体代码层面,可借助位运算符实现快速进制转换, package main import ( "strings" "

20130

一道送命题:0.1+0.2 等于 0.3

前言 去互联网金融或电商行业公司面试时,一般都会遇类似“ 0.1+0.2 等于 0.3?”...0.1+0.2 计算过程计算过程 1、十进制转成二进制 在JS内部所有的计算都是以二进制方式计算。 所以运算 0.1+ 0.2 时要先把 0.1和 0.2 从十进制转成二进制。...目前操作系统大多是64位操作系统,故这里只解释一下二进制如何转成双精度浮点数二进制。 双精度浮点数用1位表示符号位,11位表示指数位,52位表示小数位,如下图所示: ?...转换结果如下图所示: ? 同理,再把 0.2 转成二进制0.0011 0011 0011 0011...... 转成浮点数形式二进制转换结果如下图所示: ?...浮点数转成十进制 二进制浮点数计算结束后,把结果(二进制浮点数)转成十进制,其转换公式为 ?

1.4K20

群里一个转码问题灵魂拷问

http://static.cyblogs.com/QQ20200411-001905@2x.jpg 其实到这里,我先总结一下: 计算机为什么计算你这么快,原因是它只会处理0与1,二进制; 其实到硬件上面表现就是电流信号...比如说15^2,15用二进制表示就是1111,2用2进制表示就是0010,两者进行异或运算,结果就是1101,转换十进制就是13。...6、|:表示或运算,两者只有有一个为1就为1, 比如说13|2,13用二进制表示就是1101,2用二进制表示就是0010,两者进行或运算,那么结果就是1111,转换十进制就是15。...7、&:表示与运算,两者都为1就为1,其余都为0,比如说15&2, 13用二进制表示就是1111,2用二进制表示就是0010, 两者进行与运算,那么结果就是0010,转换十进制就是2。...有些人会觉得-15转化为二进制就是10001111,而3转化为二进制就是00000011,那么结果应该是10001111呀,转换十进制就是-15呀?大家可以自己写个demo就会发现是不对

34030

二进制十进制讲解与转换「建议收藏」

文章目录 什么是十进制呢? 什么是二进制十进制二进制之间可以转换十进制二进制之间转换 二进制十进制 十进制二进制 写在最后 哈喽,大家好!...,然后最低位继续累加计数,当最低位最大奇数【9】时候,便继续进位在【19】进位成【20】,举例如下 0 1 2 3 4 5 6 7 8 9 10 11 12 13…19 20 … 同理,二进制也变得不难理解了...举例,十进制0~9对应二进制如下所示: 0 1 10 11 100 101 110 111 1000 1001… 那么既然二进制十进制一样,都是一个计数方法,那么 十进制二进制之间可以转换?...答案显然是可以。下面就介绍一下十进制二进制之间转换。...十进制二进制之间转换 ​ 再讲解十进制二进制转换之前,我们要申明一点,十进制也好,二进制也好,任何一个进制数字都是由它们基数组成

1K60

八、十六进制数转换十进制

6.2.1 二进制转换十进制数  二进制数第0位权值是20次方,第1位权值是21次方……  所以,设有一个二进制数:0110 0100,转换为10进制为:  下面是竖式:  0110 0100...6.2.5 十六进制数转换十进制数  2进制,用两个阿拉伯数字:0、1;  8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;  10进制,用十个阿拉伯数字:09;  16进制,用十六个阿拉伯数字...假设有人问你,十进数 1234 为什么是 一千二百三十四?...6.3 十进制转换到二、八、十六进制数  6.3.1 10进制数转换为2进制数  给你一个十进制,比如:6,如果将它转换二进制数呢? ...说了半天,我们转换结果对二进制数110是6?你已经学会如何将二进制转换成10进制数了,所以请现在就计算一下110换成10进制是否就是6。

2.2K00
领券