zoukankan      html  css  js  c++  java
  • JavaScript 当整数超过32位最大值时的异或算法

    问题描述:

    在一个把JS代码转换为C#代码时碰到一个问题

    数值1: -1197179797 

    数值2: 84941944608  (超过32位最大值 2147483647)

    用JS异或结果是: 2118863691

    用C#异或结果是: -83780482229

    解决过程:

    经测试 JS中如果整数内存大于32位时, JS会自动屏蔽掉32位以后字节

    JS: 0^0x100000001 结果是 1  而不是 0x100000001,因为首位的1位于第33字节 自动被忽略掉了,所以结果是1

    在C#中异或是以Long 64位长度异合, 因此两者结果不一样

    解决方法:

    通过C#实现JS中效果的解决方法 

    如果异或的数num大于0xFFFFFFF, 就把32位以后去掉

    1.num = num & 0xFFFFFFFFL, 把32位以后置0

    此时如果直接强制转换 符号位会被替换, 可直接通过内存转换

    2.BitConverter.ToInt32(BitConverter.GetBytes(num), 0);

    通过这2步之后结果就和JS中 0^num 的效果一样了.

    然后再用这个结果拿另外一个数异或..搞定

  • 相关阅读:
    细节回顾 p标签的嵌套问题
    面向对象编程
    深浅拷贝
    数据交互 jsonp插件
    数据交互 跨域问题
    数据交互 axios
    数据交互 jQuery ajax
    数据交互 后端代码
    数据交互 http请求 xhr
    Windows安装Node.js报错:2503、2502的解决方法
  • 原文地址:https://www.cnblogs.com/hanf/p/2368878.html
Copyright © 2011-2022 走看看