栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

取余与位运算(对于系数为2^N)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

取余与位运算(对于系数为2^N)

取余运算符号为%
如7%2=1
23%4=3
那么取余运算如何通过位运算表示呢,(仅适用于余数为2^N)
答案是 X & (2^N - 1)

我们都知道,对于二进制数,左移一位相当于把这个数字变为原来的二倍,
如10b,左移一位变为100b, 从2变为了4,右移一位变为了原来的一半,如
1011b 右移一位后变为101,从11变为了5,相当于11/2=5,这时我们可以发现,右移时被丢弃的“1”,就是11/2时的余数。
现在我们举个例子,比如37/8=4 就相当于37/2/2/2=4
也就是把33的二进制100101b 向右移动三位变为100b
被遗弃的101b就是37%8的余数5,

这时我们还可以发现每个2^N通过2进制表示都是为最高位为1,其后跟随N个0的数(就是把1往左移了N位)
2^N-1则是原来最高位为0,其后跟随N个1的二进制数。
例:8 : 1000b
7 : 0111b

现在再看这个 X & (2^N - 1)公式,你就会发现这个操作就是保留需要被“遗弃”的后N位。

转载至:https://www.cnblogs.com/littleKing163/p/5695153.html

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/274627.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号