游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

这个新思路你知道吗?javascript中的多种进制与进制转

  进制介绍
  JavaScript中提供的进制表示方法有四种:十进制、二进制、十六进制、八进制。
  对于数值字面量,主要使用不同的前缀来区分:十进制(Decimal):
  取值数字09;不用前缀。二进制(Binary):
  取值数字0和1;前缀0b或0B。十六进制(Hexadecimal):
  取值数字09和af;前缀0x或0X。八进制(Octal):
  取值数字07;前缀0o或0O(ES6规定)。
  需要注意的是,非严格模式下浏览器支持:如果有前缀0并且后面只用到07八个数字的数值时,该数值视为八进制;但如果前缀0后面跟随的数字中有8或者9,则视为十进制。
  严格模式下,如果数字加前缀0,则报错:UncaughtSyntaxError:Decimalswithleadingzerosarenotallowedinstrictmode。
  各进制的数值,如果取值数字超过给定的范围,则会报错:UncaughtSyntaxError:Invalidorunexpectedtoken。
  在JavaScript内部的默认情况下,二进制、十六进制、八进制字面量数值,都会自动转为十进制进行运算。0x22340b11170o33270x220b111410o331239(0x33)。toString()51(0x33)。valueOf()51
  除了十进制是Javascript默认的数字进制以外,其他三种进制方式平时使用较少,主要在处理底层数据、字节编码或者位运算等时候才会碰到。进制转换
  本文将主要讨论进制转换时的问题。
  JavaScript提供了原生函数,进行十进制与其他各进制之间的相互转换。
  其中,从其他进制转换成十进制,有三种方式:parseInt(),Number(),(一元运算符)。这三种方式都只能转换整数。
  从十进制转换成其他进制,可以使用Number。prototype。toString()。支持小数。parseInt(str,radix)
  第一个参数是需要解析的字符串;其他进制不加前缀。
  第二个参数是一个进制基数,表示转换时按什么进制来理解这个字符串,默认值10,表示转十进制。
  第二个参数如果非数字,则自动转数字,如无法转称数字则忽略该参数;是数字时,必须是236的整数,超出该范围,返回NaN。parseInt(1111,2)15parseInt(1234,8)668parseInt(18af,16)6319parseInt(1111)1111
  如果不传入第二参数,则parseInt会默认使用十进制来解析字符串;但是,如果字符串以0x开头,会被认为是十六进制数。
  而其他进制的字符串,0o21(八进制),0b11(二进制)不会以该进制基数自动转换,而是得到0。
  所以,在使用parseInt进行进制转换时,为了保证运行结果的正确性和稳定性,第二个参数不能省略。parseInt(0x21)33parseInt(0o21)0parseInt(0b11)0parseInt(111,add)111parseInt(111,787)NaN
  如果需要解析的字符串中存在对于当前进制基数无效的字符,则会从最高位取有效字符进行转换,没有效字符则返回NaN。parseInt(88kk,16)136,0x88parseInt(kk,16)NaNNumber()
  可以把字符串转为数字,支持其他进制的字符串,默认转成十进制数字。
  字符串中如果存在无效的进制字符时,返回NaN。
  记住,需要使用进制前缀,0b,0o,0x。Number(0b11100)28Number(0o33)27Number(0x33)51Number(0x88kk)NaN(一元运算符)
  与Number()一样,可以把字符串转为数字,支持其他进制的字符串,默认转成十进制数字。
  字符串中如果存在无效的进制字符时,返回NaN。
  也需要使用进制前缀。0b11100280o33270x33510x88kkNaN
  可以看到,基本和Number()是一样的,都在本质上是对数字的一种转换处理。Number。prototype。toString(radix)
  它支持传入一个进制基数,用于将数字转换成对应进制的字符串,它支持转换小数。
  未指定默认值为10,基数参数的范围236,超过范围,报错:RangeError。15。。toString(2)1111585。。toString(8)11114369。。toString(16)1111(11。25)。toString(2)1011。01自定义转换
  除了这些原生函数以外,也可以自己实现进制数字之间的转换函数。
  根据相应的规则,就可以实现十进制与二进制、十六进制之间的转换的一些方法。十进制与十六进制转换
  以下代码是针对整数在十进制与十六进制之间的转换,根据基本规则进行换算。
  十六进制是以09、af进行描述数字的一种方式,其中09取本身数字的值,而af则取1015的值。
  且字母不区分大小写。functionint2Hex(num0){if(num0){return0}constHEXS0123456789abcdeflethexwhile(num){hexHEXS。charAt(num16)hexnumMath。floor(num16)}returnhex}functionhex2Int(hex){if(typeofhex!stringhex){returnNaN}consthexs〔。。。hex。toLowerCase()〕letresInt0for(leti0;ihexs。length;i){consthvhexs〔i〕letnumhv。charCodeAt()58?hv:((code97)10)resIntresInt16num}returnresInt}
  如果要转换八进制,实际上与十六进制很类似,只需根据八进制的数值范围进行部分改动即可。八进制一般使用非常少,不单独列出。
  下面将重点介绍二进制转换的相关知识,包括小数的二进制表示与转换。十进制和二进制转换
  在十进制与二进制的转换中,我们将考虑小数,理解小数是如何在这两者之间进行转换。
  先选定一个数字,比如:11。125,我们看下该数字在二进制里的表示:(11。125)。toString(2)1011。001
  可以看到,11。125的二进制表示为:1011。001。下面将以这个数字为例进行转换操作。十进制数字转换成二进制
  首先需要了解的是,二进制小数表示方法是如何得来的:整数部分,用二进制表示可以如此计算,数字11:
  1121
  521
  220
  121
  整数部分的规则,得到的结果是从下往上,倒着排1011就是二进制的11。小数用二进制表示可以如此计算,小数0。125:
  例如十进制的0。125
  0。12520。250
  0。2520。50
  0。5211
  只有等于1时才结束,如果结果不等于1将会一直循环下去。
  小数部分的规则,得到的结果是从上往下,顺着排0。001就是二进制的0。125。整数小数,所以11。125的二进制表示方式:1011。001。
  根据以上整数和小数分开计算的规则,就可以得出十进制转二进制的函数,如下:functionc10to2(num){整数constnumIntegerMath。floor(num)小数constnumDecimalnumnumIntegerletintegers〔〕if(numInteger0){integers〔0〕}else{letintegerValnumIntegerwhile(integerVal!1){integers。push(integerVal20?0:1)integerValMath。floor(integerVal2)}integers。push(1)}constresIntegerintegers。reverse()。join()letdecimals〔〕if(numDecimal){letdecimalValnumDecimal最多取49位的长度letcount49while(decimalVal!1count0){decimalValdecimalVal2if(decimalVal1){decimals。push(1)if(decimalVal1){decimalValdecimalVal1}}else{decimals。push(0)}count}}constresDecimaldecimals。join()returnresInteger(resDecimal?(。resDecimal):)}小数在转换成二进制时,会存在无限循环的问题,上面的代码里截取了前49个值。
  所以,这里就会引出了一个问题,就是常见的一个数字精度问题:0。10。2!0。3。0。10。2!0。3
  直接看一下0。1转二进制:
  0。120。2
  0。220。4
  0。420。8
  0。821。6
  0。621。2
  0。220。4循环开始
  0。420。8
  0。821。6
  0。621。2
  。。。
  。。。
  无限循环
  0。2转二进制:
  0。220。4
  0。420。8
  0。821。6
  0。621。2
  0。220。4循环开始
  0。420。8
  0。821。6
  0。621。2
  。。。
  。。。
  无限循环
  因为无法得到1,可以发现有限十进制小数,0。1转换成了无限二进制小数0。00011001100。。。,0。2转成了0。001100110011。。。。
  由于无限循环,必然会导致精度丢失,正好0。10。2计算得到的数字在丢失精度后的最后一位不为0,所以导致结果为:0。30000000000000004。
  如果截取精度后最后一位为0,那自然就不存在结果不相等的情况,如0。10。60。7,事实上,0。1和0。6转二进制后都会丢失精度,但截取到的数值都是0,所以相等。
  同样不相等的还设有0。10。7!0。8等等。
  所以是计算时转二进制的精度丢失,才导致的0。10。2!0。3。
  在JavaScript中所有数值都以IEEE754标准的64bit双精度浮点数进行存储的。
  IEEE754标准的64位双精度浮点数的小数部分最多支持53位二进制位。
  因浮点数小数位的限制而需要先截断二进制数字,再转换为十进制,所以在进行算术计算时会产生误差。
  这里能看到,如果十进制小数要被转化为有限二进制小数,那么它计算后的小数第一位数必然要是5结尾才行(因为只有0。52才能变为整数)。二进制数字转换成十进制
  方法是:将二进制分成整数和小数两部分,分别进行转换,然后再组合成结果的十进制数值。整数部分:这里直接使用parseInt函数,parseInt(1011,2)11。小数部分:如1011。001的小数位001,使用下表的计算方式。
  小数部分001
  基数的位数次幂212223
  每位与基数乘积0(21)0(22)1(23)
  每位乘积结果000。125最后的结果是每位乘积结果相加:000。1250。125。
  整数与小数合起来,就得到了1011。001的十进制数字:11。125。
  根据规则,代码实现如下所示:functionc2To10(binaryStr){if(typeofbinaryStr!stringbinaryStr){returnNaN}const〔binIntStr,binDecStr〕binaryStr。split(。)letbinDecimal0if(binDecStr){binDecimal〔。。。binDecStr〕。reduce((res,val,index){resNumber(val)(2((index1)))returnres},0)}returnparseInt(binIntStr,2)binDecimal
  原文链接:https:www。cnblogs。comjimojianghup15624693。html

苹果发布的M1处理器和英特尔对比有哪些优点和不足?2020年11月11日,苹果发布了全新Mac产品线,包括MacBookAir、13英寸MacBookPro以及Macmini,三款新品全部搭载了苹果自研的M1处理器。苹果……如何在MacBook上查找序列号?所有苹果产品(包括Mac)都具有序列号,该序列号本质上是在多种情况下使用的唯一标识符:例如,当您要在Mac上进行贸易或根据Apple的保修协议进行维修时,或检查您的Mac是否是……2020年远程办公云办公企业综合排行榜,鹏博士排名第18云生活、云经济、云办公,随着移动互联网时代的深入发展,云技术正快速地渗透进我们的日常生活。2020年以来,社会生产的各个部门也加速了云化的进程。云办公普及率大大提升,曾经起协助……小鹏首次开放工厂,老车主说这是信心背书,更是智能标签出品:电动星球News作者:蟹老板、毓肥这是信心和背书,也刷新了我对智能驱动理念的认知,小鹏就是一家追求极致产品力的企业,而这正是我想要的。直播完后,大包子狸……可拆卸电池回归GalaxyA01Core通过认证,定位低端三星即将推出的配备可拆卸电池的廉价手机已通过蓝牙认证,认证展示了这款设备的一个有趣的细节:名称。到目前为止,三星的神秘廉价手机仅已知型号为SMA013F,因此认为这款设备将以G……和谁相处舒服,就和谁在一起乍见之欢,不如久处不厌。人到世上走一遭,总会遇到一些喜欢的人和不喜欢的人。有些人,和他相处得很累,就不要继续相处了,和谁在一起舒服,就和谁在一起!你一定有过这样的体……华为MatePad10。8高清图赏,华为给大学生的一份特别礼工作、学习和生活均进入更高效的移动时代,全场景互联也成为时代趋势。借助一台科技装备提高自己学习、工作的效率,成为很多大学生以及职场人士选择。面对大家的这一需求,华为近日推出了一……南卡N2既是无线耳机也是移动电源产品序:说起无线蓝牙耳机代表者还是Airpods这样的明星产品。博主前段时间收到了深圳一家公司的无线耳机南卡N2!一款集成移动电源和无线耳机的优秀产品,今天就为大家评测一……技巧手机内存空间告急,这些办法就能轻松搞定人吃多了体型会膨胀,但对内存有限的手机来说,存储太多的照片视频和应用,手机可吃不消。虽然减肥对大家来说是难事,但清理内存让手机瘦身下来,小宁……上海有人拿到了第一块新式车牌?警方编造谣言,已被行拘我是上海第一个拿到新式车牌的人这句话是由9月26号里社交平台上一名上海男子发布,随后经过了大量的转发,引起了网友广泛关注。可能这名男子不太接受现在的车牌款式,迫不及待地想……HarmonyOSlinkboy小熊派,能擦出怎样的火花?linkboy简介linkboy是一门面向物联网、边缘计算、工业控制等领域的自研编程语言。linkboy官网地址:http:www。linkboy。ccindex。……TeledyneImaging的新款2k和4k线扫描相机采用TeledyneImaging的新款2k和4k线扫描相机采用紧凑型封装,性能领先业界全新LineaLite系列线扫描相机比以往更易理解和使用加拿大滑铁卢,May25……
笔记本电脑装固态硬盘的坑,你千万要避开,固态硬盘M。2大有文零:前言电脑系统盘已经发红,软件安装盘D盘也快要满了。因此更换固态硬盘也就提上日程了说说本文主角Orico奥睿科迅龙M。2固态硬盘,我说过即使要给电脑固态升级,容量……3G32G的电视盒子,如今只有它一枝独秀引言如今,智能手机异常火热,人人爱玩手机,上网聊天刷微博,但是,当我们周末宅在家里想要观看电视剧、电影、综艺节目时,我们往往更倾向于选择更大屏幕的电视机。因为相比于屏幕尺……每次10分钟跟我学Python(第三十六次课)大家好!我是幻化意识流。今天继续跟我学Python。在日常生活中,我们经常会有很多账户和密码,比如:不同银行的银行卡,邮箱账户,各种app,网站账户等等,为了安全考虑,我……用料扎实,供电稳定技嘉B550MAORUSPRO小雕引言每天上网遛弯,这也为剁手留下了充足的机会。上周,偶然间认识了技嘉B550MAORUSPRO小雕主板,最看中它供电设计,其采用了103相数字供电,这一点相比我之前在用过……CS95中期大改款,可霸气可小鲜肉?网友直乎不能接受!长安新款CS95中期改款新车将采用与睿骋CC、新逸动类似的家族式设计语言,动力更加强劲,更加安全可靠,颜值担当,预计最快今年底正式亮相。外观改变新车换装了全新家族式……立Flag学习Ng高可用配置立Flag学习Ng高可用配置keepalived高可用配置keepalived高可用配置nginx解决tomcat高可用的思路,是前面加一层负载服务nginx。那当ng挂……我们做了一档综艺节目,还是为了捧红它投身新国货,是未来十年少有的正确的事情之一。文巴九灵01。一个在杭州的上海人和一个在上海的杭州人2021年1月10号,上海。在虹桥火车站的一家快餐店,一……电子原器件都认识,但为什么不懂看电路图和原理图?认识电子元器件但不会看原理图是很正常的,任何的电子产品内部都是各种各样的元器件组成的,要读懂一个产品的原理图,就相当于阅读一篇文章一样,必须要先认识字,然后组词组句,最后才能阅……什么游戏烧坏炸过你的显卡?坦克世界!!!那是一个漆黑的夜晚,当晚我正瞄准地方坦克,右手颤抖的握着鼠标,对着敌军就是一炮。然后我的笔记本蓝屏了,显卡也废了。剑灵5档烧坏过我的gtx680,一个……16G512G不例外,努比亚再降700元,骁龙888也退场了如果说今年的vivoX70是凭借硬件提升影像实力的,那么努比亚nubiaZ30Pro就是靠着硬件软件的打磨,其实努比亚这个手机品牌算风格比较独特的一个手机品牌,以无边框、Fit……苹果iOS15正式版推送来了,有亮点,有鸡肋,你收到了吗?北京时间9月21日凌晨,苹果公司正式向全球用户推送了iOS15、iPadOS15系统,本次升级最为明显的系统UI变化应该是设置选项的显示、天气APP整体的设计和推送消息的设计。……沉淀时光,跃然纸上墨案inkPadX电子阅读器繁忙的工作之余,一杯清茶,一本好书,开始重新定义生活。大家好,我是小泽,又见面啦。五年前的生日,我送给自己一款Kindle阅读器,正式开启了阅读生活。五年后的今天,再次去……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网