C 按位运算符的幂2模? 2的幂模如何仅对二进制数的低位(1011000111011010)起作用 这个数字是多少模2到幂0,2到幂4 2的幂和模算子有什么关系?它有特殊的财产吗 有人能给我举个例子吗

C 按位运算符的幂2模? 2的幂模如何仅对二进制数的低位(1011000111011010)起作用 这个数字是多少模2到幂0,2到幂4 2的幂和模算子有什么关系?它有特殊的财产吗 有人能给我举个例子吗,c,math,bit-manipulation,bitwise-operators,bitwise-and,C,Math,Bit Manipulation,Bitwise Operators,Bitwise And,指导老师说:“当你把某物的mod取为2的幂时,你只取它的低阶位。”。我不敢问他是什么意思=)他的意思是: x modulo y = (x & (y − 1)) 当y是2的幂时 例如: 0110010110 (406) modulo 0001000000 (64) = 0000010110 (22) ^^^^<- ignore these bits x = 10101010110101110 x mod 4 = 00000000000000010 01100110

指导老师说:“当你把某物的mod取为2的幂时,你只取它的低阶位。”。我不敢问他是什么意思=)

他的意思是:

x modulo y = (x & (y − 1))
当y是2的幂时

例如:

0110010110 (406) modulo
0001000000 (64)  =
0000010110 (22)
^^^^<- ignore these bits
      x = 10101010110101110
x mod 4 = 00000000000000010
01100110(406)模
0001000000 (64)  =
0000010110 (22)

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

  334 % 10 = 4
  12345 % 10 = 5
同样,如果你取一个模为100的数,你只得到最后两位数

  334 % 100 = 34
  12345 % 100 = 45

所以你可以通过查看二进制的最后几位,得到二次幂的模。这与按位and运算相同。

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

例如:

0110010110 (406) modulo
0001000000 (64)  =
0000010110 (22)
^^^^<- ignore these bits
      x = 10101010110101110
x mod 4 = 00000000000000010

他的意思是,取
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 4
number&00000011
相同(其中
&
表示按位和)



请注意,这在base-10中的作用完全相同:
number mod 10
给出base-10中数字的最后一位,
number mod 100
给出最后两位,等等。

回答您的具体问题:

  • mod是一个余数运算符。如果应用于0,1,…,中的一系列数字x,那么x mod n将是0,1,…,n-1,0,1,…,n-1,无穷大。当模n是2的幂时,那么x模n将以二进制形式从0到n-1,再到0,再到n-1,等等;对于看起来像二进制01xxxxx的模n,x mod n将循环通过每个低阶位xxxxx
  • 二进制1011000111011010模1是0(模2^0产生最后的零位;模1的所有内容都是零)。二进制1011000111011010模二进制10000为1010(模2^4产生最后四位)
  • 二进制数的除法和余数除以二的幂特别有效,因为它只是移位和掩蔽;从数学上讲,这没什么特别的
  • 示例:见问题2的答案

  • 嘿,谢谢你的回复。我没有完全理解你的例子?2的幂也成立吗?54%32等于2^5等于22。波波:是的。末尾的位数由使用的二次幂决定。正如Cicada所描述的,您可以将其计算为54&(32-1)。为什么不尝试手动执行一些示例计算,然后您就会看到结果。只有当所有操作数都为正时,才会出现这种情况!根据语言的不同,行为会有所不同。例如,在C中,
    -5%4==-1
    尽管在代数中我们通常期望
    -5 mod 4
    是3(在C中:
    -5&(4-1)==3
    。这意味着,例如,如果左操作数不是无符号的,编译器将不会使用
    &
    优化文本
    %4
    。@calandoa:我们在这里讨论的是二进制作为数字系统,而不是数字的位编码。
    -5
    ,例如,是编写的
    -101
    @BlueRaja:当然我们在谈论位编码:
    &
    不是为数学定义的
    -
    。我想你的评论更像是“我们不是在谈论负数”。也许我们不是,但这在问题和答案中都不清楚,所以我说得更清楚了。你是不是在
    数字MOD 256
    (数字和(0xFF00))>>8
    (对于2^8=256)