吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2352|回复: 9
收起左侧

[已解决] javascript 位移问题 >>32 >>>32

[复制链接]
cube 发表于 2019-7-9 21:54
本帖最后由 cube 于 2019-7-12 21:06 编辑

a = -1
a>>32结果为-1
a>>>32结果为0x0ffffffff  并不是-1 我理解为仅仅是符号位置0了.


1<<32
1>>32
1>>>32
的结果都是1
参考链接中,"右操作数应小于 32位,否则只有最低 5 个字节会被使用", 这里究竟是小于32位还是小于32呢.以及低5字节被使用是指左操作数?当然,如果32是指32位,那么5字节应该是指右操作数了.
这是何解呢?
参考链接:  https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Unsigned_right_shift
BNWHDA8G}ZE~09DW9R~L%MC.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

saidom1949 发表于 2019-7-9 22:31
这帖子不是解释了吗
向右移动,左侧按照右侧填充,就变成:
111111111111111……111--》11111111111……111   结果还是-1
无符号移动自动补零
就变成了0000000000000000……001
结果你是x64系统 结果后面还有32个1  就变成 000000000……0001111111111……1  就是那啥数了
 楼主| cube 发表于 2019-7-9 22:51
本帖最后由 cube 于 2019-7-9 22:56 编辑
saidom1949 发表于 2019-7-9 22:31
这帖子不是解释了吗
向右移动,左侧按照右侧填充,就变成:
111111111111111……111--》11111111111……1 ...

如果是这样解释,那么
1>>>32
1>>32
1<<32
结果都是1,又是何解呢?
孤狼微博 发表于 2019-7-9 22:53
安兆童 发表于 2019-7-9 23:38
谢谢分享一下!
saidom1949 发表于 2019-7-10 16:32
本帖最后由 saidom1949 于 2019-7-10 17:01 编辑
cube 发表于 2019-7-9 22:51
如果是这样解释,那么
1>>>32
1>>32

嗯 我刚刚查了一下,我解释错误了
原因是:当你位移32位时(无论左右),自动归0,也就是等于你位移0位(我估摸应该是溢出了),所以位移32位等于没位移;
同理,你位移32的倍数时,还是等于位移0位。
而负数因为有一个高位不计入位移部分,然后同上计算,无论你怎么位移32的倍数位数,都等于-1。
之前解释错误,实在抱歉。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
cube + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| cube 发表于 2019-7-10 23:05
本帖最后由 cube 于 2019-7-10 23:11 编辑
saidom1949 发表于 2019-7-10 16:32
嗯 我刚刚查了一下,我解释错误了
原因是:当你位移32位时(无论左右),自动归0,也就是等于你位移0位( ...

嗯,谢谢,你回答了三次,我都看了. 你说的对.

js中的位移操作,首先会把左右操作数转为32位,然后位移
而位移n位,就如你所说,实际位移了n%32位(测试后的猜测,并没找到文档支持)

引申出以下疑问:
a = -1 = 0xff...f  我不知道a是多少位,但符号位一定是1
a>>>32  
首先会把a转为32位 即:0xffff,ffff ,然后右移32%32位, 但是结果却是 &#8237;4294967295 &#8236; 说明符号位变0了.结果的宽度变的超过32位了. 很奇怪.
 楼主| cube 发表于 2019-7-10 23:17
本帖最后由 cube 于 2019-7-10 23:19 编辑
a = -1 = 0xff...f  我不知道a是多少位,但符号位一定是1
a>>>32  
首先会把a转为32位 即:0xffff,ffff ,然后右移32%32位, 但是结果却是 4294967295  说明符号位变0了.结果的宽度变的超过32位了. 很奇怪

嗯,是了.返回结果与左操作数同类型,这样就可以解释了.
a = -1 = 0xff...f
a>>>32 = 0xffff,ffff  再扩充到a的同类型(高位补0),也就变成了正数
所以
a>>>32 = 0xffff,ffff  =  0x00...0ffff,ffff = 4294967295
xuhh 发表于 2019-7-11 09:31
你使用位移运算符,你的符号位会变吗?
 楼主| cube 发表于 2019-7-11 20:17
xuhh 发表于 2019-7-11 09:31
你使用位移运算符,你的符号位会变吗?

不是我的.这是javascript .
另:你也可以试试.
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-6-11 21:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表