js正数转负数的函数(负数转16进制依据的规则)

背景 为什么要做js位运算呢? 因为最近在学习hash算法,里面用到了大量的位运算另外网上也找了很多资料,但大都比较片面,没有说明特殊情况时的处理,换几组数据计算结果就出错。 重温整数 ECMAScript整数有两种类型,即: 有符号整数(允许用正数和负数)无符号整数(只允许用正数)在ECMAScript中,所有整数字面量默认都是有符号整数,这意味着什么呢? 有符号整数使用31位表示整数的数值,用…

环境

为什么要做js位运算呢?

  • 由于近期在学习培训hash算法,里边使用了大批量的位运算
  • 此外网站也找了许多材料,但大多数较为片面性,并没有表明特殊情况时的解决,换多组数据信息数值就出差错。

追忆整数

ECMAScript 整数有三种种类,即:

  • 有符号整数(容许用正数和负数)
  • 无符号整数(只允许用正数) 在 ECMAScript 中,全部整数字面量默认设置全是有符号整数,这代表着什么?

有符号整数应用 31 位表明整数的标值,用第 32 位表明整数的符号,0 表示正数,1 表明负数。

标值范畴从 -2147483647 到 2147483647。

位运算会把二进制数限定在32位,超过一部分会被放弃

调节位运算常见的好多个方式

toString(2)

转化成2进制字符串数组

var a = 1732584193;
a.toString(2); // 1100111010001010010001100000001

parseInt(‘11001’, 2)

将2进制字符串转化成10进制数

parseInt(\'11001\', 2) // 25

padStart(32, ‘0’)

字符串数组总长,左侧不够十位数补0

\'1100000001\'.padStart(32, 0) // 00000000000000000000001100000001

源代码、反码、补码

源码

将数据转换成的2进制数, 最左侧表明符号位,1负数,0正数

5 源代码: 0101
-10 源码:11010

反码

正数的反码与其说原码同样

负数的反码,除符号位外,别的位取反

5 
源代码:0101
反码:0101

-10
源码:11010 
反码:10101

补码

正整数的补码与其说原码同样

负整数的补码,取反码 1

5
源代码:0101
补码:0101

-10
源码:11010
补码:10110

ok,从现在起主题

位运算符

  • 非(~)
  • 与(&)
  • 或(|)
  • 异或运算(^)
  • 带符号偏移(<<)
  • 带符号右移(>>)
  • 无符号偏移(>>>)

位运算符:非(~)

计算流程:

  1. 将该数据取负数
  2. 随后减1
~25 // -26

全过程:

  • 25取负:-25
  • 减1:-26
~1  // -2
~-1 // 0
~100 // -101
~-100 // 99

位运算符:与(&)

计算流程:

  1. 把两个数转化成2进制补码
  2. 同样部位开展较为(同是1,结论为1,不然为0)
  3. 假如数值是负数,还需要再做补码解决

假如十位数不足,正数左侧补0,负数补1

真正计算

10 & 3 // 2

全过程:

  • 10 补码:1010
  • 3 补码:0011
  • 结论:0010,即 2

正负极计算(1)

14 & -13 // 2

全过程:

  • 14 补码:01110(补一位符号位)
  • -13 源代码:11101,补码:10011
  • 与运算:00010,即 2

正负极计算(2)

88 & -19 // 72

全过程:

  • 88 补码:01011000(补一位符号位)
  • -19 源代码:110011,补码:101100
  • 01011000 & 101100
  • 负数(101100)十位数不足,左侧补1,即11101100
  • 也就是 01011000 & 11101100
  • 结论为:01001000,即:72

负负计算

-12 & -5 // -16

全过程:

  • -12 补码:10100
  • -5 补码:11011
  • 与运算:10000
  • 结论为负,再取一次补码: 110000:-16

训练

3 & 7
-21 & 16
-271733879 & -1732584194
1125899778533470 & 812930
20 & 0xF
48192342 & 0xFFFF

位运算符:或(|)

计算流程:

  1. 把2个数据转换成2进制补码
  2. 同样部位开展较为(有一个是1,结论即是1)
  3. 假如数值是负数,还需要再做补码解决

真正计算

10 | 3 // 11

全过程:

  • 10 源代码:1010
  • 3 源码:0011
  • 结论:1011,即 11

正负极计算

10 | -3 // -1

全过程:

  • 10补码:01010
  • -3补码:11101
  • 或运算:11111
  • 结论为负,再取码:10001,即:-1

负负计算

-15 | -21 // -5

全过程:

  • -15 补码:110001
  • -21 补码:101011
  • 或运算:111011
  • 结论为负再取补码:10101,即:-5

训练

15 | 20
40 | -14
-271733879 | 1732584193
(-271733879 & -1732584194) | (~-271733879 & 271733878)

位运算符:异或运算(^)

计算流程:

  1. 把两个数转化成2进制补码
  2. 同样部位开展较为(务必是0和1或是1和0,结论才为1)
  3. 假如结论为负,再取补码

真正异或运算

10 ^ 3 // 9

全过程:

  • 10 补码:1010
  • 3 补码:0011
  • 结论:1001,即 9

正负极异或运算

10 ^ -3 // -9

全过程:

  • 10 补码: 01010
  • -3 补码:11101
  • 异或运算:10111
  • 结论为负,再取补码:11001,即-9

负负异或运算

-10 ^ -3 // 11

全过程:

  • -10 补码:10110
  • -3 补码:11101
  • 异或运算:01011,即:11

训练

5 ^ 8
-10 ^ 9
-13 ^ -20
-271733879 ^ -1732584194 ^ 271733878

位运算符:带符号偏移(<<)

计算流程:

  1. 把数据转换成2进制补码
  2. 偏移特定十位数,右侧补0
  3. 假如结论未负数,再取补码

超出32位的一部分放弃

正数偏移

1 << 2 // 补码:00000001 左移2位, 即 00000100,结论为:4
5 << 3 // 补码:00000101 偏移3位, 即 00101000,结论为:40 

可以看得出,正数带符号偏移,即 a << n,实际上是 a * 2的n次幂

负数偏移

-3 << 4
  • -3 补码:101
  • 左移4位 1010000
  • 标志位为负,取补码:1110000,即-48
-6 << 3  // 1010 << 3 相当于 1010000,取补码,1110000 即:-48
-11 << 4 // 10101 << 4 等于 101010000,取补码,110110000 即:-176

边沿状况

情况1:正数变负数

1732584193 << 2  // -1659597820

测算全过程

  • 1732584193转化成2进制源代码:1100111010001010010001100000001(31位)
  • 偏移2位,补2个0:110011101000101001000110000000100(33位)
  • 清除左侧不必要的1位:10011101000101001000110000000100(32位)
  • 变成负数,取补码:11100010111010110111001111111100
  • 即:-1659597820

状况2:负数变正数

-1732584193 << 2  // 1659597820

测算全过程

  • -1732584193转化成2进制:11100111010001010010001100000001(32位)
  • 负数,取补码:10011000101110101101110011111111(32位)
  • 偏移2位:1001100010111010110111001111111100(34位)
  • 不必要一部分放弃:01100010111010110111001111111100(32位)
  • 标记位是正,不用再补码,即:1659597820

训练

1 << 32 
1 << 33 
1 << 40
2147483648 << 2
1732584193 << 6

位运算符:带符号偏移(>>)

计算流程:

  1. 取数据二进制补码
  2. 偏移特定十位数,左侧补位与标记位一致
  3. 不必要位被放弃
  4. 假如数值为负,再取补码

正数偏移

5 >> 1 // 0101 右移1位 0010,即 2
1 >> 2 // 0001 偏移1位 0000,即 0

正数右移非常简单,移出来的信息立即放弃就可以,左侧用0填补

负数偏移

-5 >> 2 // -2

剖析:

  • -5 补码:1011
  • 偏移2位:1110
  • 结论为负,取补码:1010,即-2

训练

5   64 >> 9
1732584193 >> 4

位运算符:无标记偏移(>>>)

计算流程:

  1. 把数据转换成32位2进制补码
  2. 连着标记位,右挪动特定的十位数
  3. 往右边被移出来的位被丢掉,左边用0添充

因为符号位变成了 0,因此结论一直正的

正数偏移

正数情况下 >> 和 >>> 结论是一样的

5 >> 2 // 101 偏移2位 001 即:1
5 >>> 2 // 101 右移2位 001 即:1

负数偏移

-5 >>> 2 // 1073741822

全过程:

  • -5 源代码: 10000000 00000000 00000000 00000101
  • 补码:11111111 11111111 11111111 11111011
  • 偏移二位:00111111 11111111 11111111 11111110
  • 转化成十进制即是:1073741822

问题:为什么这一要补满32位,而以前的计算也没有?

由于先前的计算,正数补的全是0,负数尽管补1,但测算后要做补码,补位的数最后不危害测算

而无标记偏移,则会危害计算。因此必须补齐

训练

-23 >>> 2
45678765 >>> 31

有关位运算的主要构思

  • 计算前要用补码
  • 计算结论造成负数,再取一次补码

以上内容全是本人搜集、及其多次试着梳理的。

由于在网上看见的许多文章内容计算方式也不对,尽管举的事例没什么问题,但换发电机组数据就计算误差。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年5月12日 下午2:09
下一篇 2022年5月12日 下午2:10

相关推荐

  • 天猫的淘宝区别是什么,简述两者的质量及优势对比

    现在越来越多的人在网上购物,现在网上购物的平台也非常多,什么淘宝天猫,京东,拼多多,当当网等等,当大家看到淘宝天猫的名字总是一同出现,很容易认为淘宝和天猫就是一样的,虽然天猫和淘宝都是阿里巴巴的,也都是属于购物性网站,但是事实上它们还是有很大的区别的,今天小编就带大家来了解一下淘宝和天猫到底有什么不一样。 1.两者的交易性质不同:淘宝是个人与个人之间的网上交易平台,销售的商品大多数来自于批发或…

    2022年6月11日
    900
  • 什么早教机好用(推荐三款性价比高的早教机)

    单纯功能机的时代早已过去,早教机的发展迎来了内外并重的时期,不仅功能得到了进一步的提升,外形也更受注重。在愈发激烈的市场竞争中,某些早教机产品超高的颜值很容易就脱颖而出,成为用户关注的重点,在众多的早教机产品中,就有那么三款早教机颜值非凡,功能也不落下风,不失为一个好选择。 一、原道小童猫T5儿童早教机 提起小童猫,可能不少小朋友都会很熟悉,作为央视知名动漫品牌,小童猫具有自身出众的品牌含义,和老…

    2022年10月22日
    380
  • 苹果7目前价格是多少(苹果7最新价格介绍)

    从消费者的角度来看,iPhone的寿命比安卓的手机长,虽然安卓厂商不认可,但事实就是这样,就算到现在,也还有非常多人在使用iPhone6,这可是2014年发布的产品,同期发布的安卓机有Mate9和小米5,现在基本上已经没人用了,而且不光是用户在用,iPhone也还在生产,iPhone7还没有停产。 目前很多安卓厂商表示自己的系统是UI的,在进行了优化之后流畅度也跟iOS差不多。例如小米MIUI12…

    2022年5月2日
    940
  • 市场营销方案最关键的部分是哪些,市场营销的5种手段

    营销策划是一种灵活性和难度系数都非常高的工作,如何设计适合自己产品的策划方案,又如何把方案严格的实施并取得预期的效果,虽然并没有一套固定的模板,可以让我们去参照,但是只要把握一些基本原则,还是如意做出有效的营销策划方案。 第一市场定位 市场定位常见的有三种 1、避强定位,这是一种避开强有力的竞争对手的市场定位,可以是错开市场区域、错开热销品类等,在长尾市场寻找机会。其优点是:可以避开竞争对手的关注…

    2022年6月27日
    860
  • 淘宝新手如何做推广,淘宝网新手开店入门教程

    不少新手刚解决完“产品上架”、“主图制作”、“详情页制作”等等问题,好不容易产品顺利上架了,店铺开始运转了一段时间,又在揪心“有流量没销量”、转化超低。 做淘宝,每一个环节都非常磨人,盲目操作的话,很容易走入误区。 我们一定要学会剥丝抽茧、培养自己的运营思维,有流量没转化、没销量,我们就找到影响销量的全部因素,罗列、分析、思考、比对,直到问题解决为止。 先记住这个公式:销量=展现量X点击率X转化率…

    2022年7月13日
    530
  • 什么是手机u盘存储(手机u盘使用方法)

    前言 随着各类手机APP的不断升级、各大手机相机功能的不断优化,手机的内存也越来越大。 但即便如此,我们还是会经常收到手机内存满的提示,于是土豪选择买新手机,普通人则选择备份手机里的东西来减少手机的内存。关于备份手机,有些会选择网盘备份文件,而如果手机里有一些较为隐私或者机密的文件,则更适合备份到电脑里。这两种方式都会带来各自的问题:网盘备份需要网络,而电脑备份则需要人在电脑旁,当然咯,站内大神很…

    2022年5月6日
    1080
  • 光宇推广员是做什么的,光宇科技游戏推广员最新消息

    光宇游戏CEO宋洋发表了题为《专注游戏品质,向精品化模式发展》的主题演讲,演讲中他谈到如何做数据化、精细化运营。以下宋的演讲整理。表示光宇坚持用数据驱动运营,让游戏运营越来越深化和细化。 宋洋:大家好,我是来自光宇游戏的宋洋,非常感谢GMGC的邀请,能让我站在这里跟大家分享一下光宇游戏的一些心得和想法。首先我介绍一下光宇游戏,我们成立于2004年,开始涉足游戏行业,今年是第11个年头。我们在9年以…

    2022年6月14日
    730
  • 鱼和熊掌不可兼得的寓意和感悟!

    我们在高中时代就熟知的“鱼和熊掌”的典故,其实完美的体现了中国人的三种智慧,这三种智慧,缺一不可! 鱼和熊掌的典故,出自孟子的《鱼,我所欲也》。因为经典,就成了典故和成语“鱼和熊掌,不可兼得”。 其中蕴含的中国哲学,今天我们就从三个方面谈谈。 第三:知足常乐。 每个人都有一点东西,或是熊掌,或是鱼。不过,每个人对自己所拥有的东西不一定就觉得满足。有鱼的羡慕有熊掌的昂贵,有熊掌的人则羡慕有鱼人的朴素…

    2022年8月4日
    3550
  • 关明生个人简介,揭秘阿里十八罗汉股权比例

    2001年关明生选择加入阿里巴巴时,正是阿里危机四伏之际:当时整个互联网行业都陷入寒冬期,阿里巴巴濒临倒闭,银行账户只剩下1000万美元,每月花销200万美元,收入为0,而且组织架构混乱,员工各行其是。 关明生临危受命,大刀阔斧的改革阿里,把每月花销降到了50万美元,然后通过树立价值观整顿公司秩序,最后开发项目“中国供应商”,终于让阿里巴巴在2002年实现盈利。从生死存亡到开始盈利,再到发展壮大,…

    2022年6月8日
    1490
  • 如何优化关键词,网站优化关键词的3个方法

    网站关键词是给我们带来排名和流量的一个重要因素,所以关键词的优化对于我们的重要性我们也不在多说了。所以我们企业在做网站的时候对于关键词异地要明确,那么网站怎样优化关键词的方法?我们如何把关键词优化好,是我们每个seo专员要认真考虑的问题,如果我们的关键词和网站本身没有什么联系,也不会给网站带来流量,我们所有的事情都白做了。 正旭营销提示:企业要想把自己的产品在网上进行推广,做个自己品牌的官方网站是…

    2022年6月30日
    550

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信