按位运算符的 2 次方取模?

发布于 2024-11-19 23:53:45 字数 221 浏览 9 评论 0原文

  1. 2 的幂模如何仅适用于二进制数的低位 (1011000111011010)?
  2. 这个数 mod 2 的 0 次方、2 的 4 次方是多少?
  3. 2 的幂与模运算符有什么关系?它是否拥有特殊属性?
  4. 有人能给我举个例子吗?

老师说“当你取某个东西的 2 次方时,你只需取它的低位”。我太害怕了,不敢问他的意思 =)

  1. How does mod of power of 2 work on only lower order bits of a binary number (1011000111011010)?
  2. What is this number mod 2 to power 0, 2 to power 4?
  3. What does power of 2 have to do with the modulo operator? Does it hold a special property?
  4. Can someone give me an example?

The instructor says "When you take something mod to power of 2 you just take its lower order bits". I was too afraid to ask what he meant =)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

清醇 2024-11-26 23:53:46

他的意思是,采用number mod 2^n相当于剥离n最低阶(最右边)位之外的所有<代码>数字。

例如,如果 n == 2,

number      number mod 4
00000001      00000001
00000010      00000010
00000011      00000011
00000100      00000000
00000101      00000001
00000110      00000010
00000111      00000011
00001000      00000000
00001001      00000001
etc.

那么换句话说,number mod 4number & 相同。 00000011 (其中 & 表示按位与)


请注意,这在以 10 为基数的情况下完全相同:number mod 10 给出最后一位数字以 10 为基数的数字,number mod 100 给出最后两位数字,等等。

He meant that taking number mod 2^n is equivalent to stripping off all but the n lowest-order (right-most) bits of number.

For example, if n == 2,

number      number mod 4
00000001      00000001
00000010      00000010
00000011      00000011
00000100      00000000
00000101      00000001
00000110      00000010
00000111      00000011
00001000      00000000
00001001      00000001
etc.

So in other words, number mod 4 is the same as number & 00000011 (where & means bitwise-and)


Note that this works exactly the same in base-10: number mod 10 gives you the last digit of the number in base-10, number mod 100 gives you the last two digits, etc.

萌化 2024-11-26 23:53:46

他的意思是:

x modulo y = (x & (y − 1))

当 y 是 2 的幂时。

示例:

0110010110 (406) modulo
0001000000 (64)  =
0000010110 (22)
^^^^<- ignore these bits

现在使用您的示例:

1011000111011010 (45530) modulo
0000000000000001 (2 power 0) =
0000000000000000 (0)
^^^^^^^^^^^^^^^^<- ignore these bits

1011000111011010 (45530) modulo
0000000000010000 (2 power 4) =
0000000000001010 (10)
^^^^^^^^^^^^<- ignore these bits

What he means is that :

x modulo y = (x & (y − 1))

When y is a power of 2.

Example:

0110010110 (406) modulo
0001000000 (64)  =
0000010110 (22)
^^^^<- ignore these bits

Using your example now :

1011000111011010 (45530) modulo
0000000000000001 (2 power 0) =
0000000000000000 (0)
^^^^^^^^^^^^^^^^<- ignore these bits

1011000111011010 (45530) modulo
0000000000010000 (2 power 4) =
0000000000001010 (10)
^^^^^^^^^^^^<- ignore these bits
踏月而来 2024-11-26 23:53:46

考虑一下当您对一个数字取模 10 时。如果您这样做,您只会得到该数字的最后一位数字。

  334 % 10 = 4
  12345 % 10 = 5

同样,如果你对一个数字取模 100,你只得到最后两位数字。

  334 % 100 = 34
  12345 % 100 = 45

因此,您可以通过查看二进制的最后一位数字来获得 2 的幂的模数。这与执行按位与相同。

Consider when you take a number modulo 10. If you do that, you just get the last digit of the number.

  334 % 10 = 4
  12345 % 10 = 5

Likewise if you take a number modulo 100, you just get the last two digits.

  334 % 100 = 34
  12345 % 100 = 45

So you can get the modulo of a power of two by looking at its last digits in binary. That's the same as doing a bitwise and.

执笔绘流年 2024-11-26 23:53:46

模通常返回除法后的值的余数。例如,x mod 4 根据 x 返回 0、1、2 或 3。这些可能的值可以使用二进制中的两个位 (00, 01, 10, 11) 表示 - 另一种执行 x mod 4 的方法是简单地将 x 中除最后两位之外的所有位设置为零那些。

例子:

      x = 10101010110101110
x mod 4 = 00000000000000010

Modulo in general returns the remainder of a value after division. So x mod 4, for example, returns 0, 1, 2 or 3 depending on x. These possible values can be represented using two bits in binary (00, 01, 10, 11) - another way to do x mod 4 is to simply set all the bits to zero in x except the last two ones.

Example:

      x = 10101010110101110
x mod 4 = 00000000000000010
_蜘蛛 2024-11-26 23:53:46

回答您的具体问题:

  1. mod 是余数运算符。如果应用于 0, 1, ... 中的一系列数字 x,则 x mod n 将是 0, 1, ..., n-1, 0, 1, ..., n-1,无穷无尽。当你的模数 n 是 2 的幂时,那么 x mod n 将以二进制形式从 0 计数到 n-1,再计数到 0,再计数到 n-1,依此类推;对于看起来像二进制 01xxxxx 的模 n,x mod n 将循环遍历每个低位 xxxxx。
  2. 二进制 1011000111011010 mod 1 为 0(mod 2^0 产生最后的零位;所有 mod 1 都为零)。二进制 1011000111011010 mod 二进制 10000 为 1010(mod 2^4 产生最后四位)。
  3. 二进制数除以 2 的幂特别有效,因为它只是移位和掩码;从数学上来说,这没什么特别的。
  4. 示例:参见问题 2 的回答。

Answering your specific questions:

  1. mod is a remainder operator. If applied to a series of numbers x in 0, 1, ..., then x mod n will be 0, 1, ..., n-1, 0, 1, ..., n-1, ad infinitum. When your modulus n is a power of 2, then x mod n will count up in binary from 0 to n-1, back to 0, to n-1, etc; for modulus n that looks like binary 01xxxxx, x mod n will cycle through every of those low-order bits xxxxx.
  2. binary 1011000111011010 mod 1 is 0 (mod 2^0 yields the last zero bits; everything mod 1 is zero). binary 1011000111011010 mod binary 10000 is 1010 (mod 2^4 yields the last four bits).
  3. Division and remainder of binary number by powers of two is particularly efficient because it's just shifting and masking; mathematically it's nothing special.
  4. Example: See answer to question 2.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文