- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从代数定律的角度思考,我想知道在位操作领域是否存在任何类似于代数的官方指导方针。
代数示例
a - b =/= b - a
让a = 7
和b = 5
a - b = 2
b - a = -2
让a = 10
和b = 3
a - b = 7
b - a = -7
因此,如果 a > b
,b - a
将是等价于 a - b
的负数。因此,我们可以说|a - b| = |b - a|
.
其中|x|
表示x
的绝对值。
按位示例
a | b =/= a + b
00001010 = 10
OR 00000101 = 5
-----------------
00001111 = 15
注意无符号字节操作:10 | 5 = 15
,与10 + 5 = 15
但是,如果 a
和 b
都等于 5,并且我们对它们进行OR
,结果将为 5,因为 a = b
,这意味着我们只是相互比较相同的确切位,因此不会产生任何新内容。
同样,如果b = 7
、a = 10
并且我们对它们进行OR
,我们将得到15。这是因为
00001010 = 10
OR 00000111 = 7
-----------------
00001111 = 15
因此,我们可以有效地得出结论:a | b =/= a + b
。
最佳答案
位运算只是应用于操作数的相应位之间的 bool 运算符,遵循类似于 bool 代数定律的定律,例如:
AND (&)
:可交换、结合、恒等(0xFF)、歼灭器(0x00)、幂等OR (|)
:可交换、结合、恒等(0x00)、歼灭器(0xFF)、幂等XOR (^)
:可交换、结合、恒等(0x00)、逆(自身)NOT (~)
:逆(本身)AND 和 OR 相互吸收:
a & (a | b) = a
a | (a & b) = a
有一些分配运算符对,例如:
a & (b | c) = (a & b) | (a & c)
a & (b ^ c) = (a & b) ^ (a & c)
a | (b & c) = (a | b) & (a | c)
但请注意,XOR 不会分布在 AND 或 OR 上,OR 也不会分布在 XOR 上。
德摩根法以多种形式适用:
~(a & b) = ~a | ~b
~(a | b) = ~a & ~b
通过对ℤ/2ℤ域的推理,可以找到XOR和AND的一些规律,其中加法对应于XOR,乘法对应于AND:
(a ^ b) & (c ^ d) = (a & c) ^ (a & d) ^ (b & c) ^ (b & d)
有一些结合算术和位运算的法则:
a - b = ~(~a + b)
a + b = (a ^ b) + ((a & b) << 1)
min
进入max
反之亦然:min(a, b) = ~max(~a, ~b)
, max(a, b) = ~min(~a, ~b)
由于被推到边缘的位被“破坏”,移位没有逆运算
left shift (<<)
:关联、分配、同一性 (0x00)
right shift (>>)
:关联、分配、同一性 (0x00)
rotate left (rl)
:关联、分配、恒等 (0x00)、逆 ( rr
)
rotate right (rr)
:关联、分配、恒等 (0x00)、逆 ( rl
)
虽然移位没有逆元,但由于其他定律,一些涉及移位的表达式确实具有逆元,例如:
x + (x << k)
具有逆元,因为它实际上是与奇数的乘法,并且奇数具有以 2 的幂为模的模乘逆元。对于 x + (x << 1) = x * 3
,其倒数为x * 0xAAAAAAAB
(对于32位,其他大小调整常数)x ^ (x << k)
出于类似的原因,有一个逆,但通过与无进位乘法的对应关系。x ^ (x >> k)
(带有无符号右移)有一个逆,它只是上面的“镜像”。关于computer-science - 有按位运算符法则吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12764670/
Or 运算符 对两个表达式进行逻辑“或”运算。 result = expression1 Or expression2 参数 result 任意数值变量。 expression1 任意
Not 运算符 对表达式执行逻辑非运算。 result = Not expression 参数 result 任意数值变量。 expression 任意表达式。 说明 下表显示如何
Is 运算符 比较两个对象引用变量。 result = object1 Is object2 参数 result 任意数值变量。 object1 任意对象名。 object2 任意
\ 运算符 两个数相除并返回以整数形式表示的结果。 result = number1\number2 参数 result 任意数值变量。 number1 任意数值表达式。 numbe
And 运算符 对两个表达式进行逻辑“与”运算。 result = expression1 And expression2 参数 result 任意数值变量。 expression1
运算符(+) 计算两个数之和。 result = expression1 + expression2 参数 result 任意数值变量。 expression1 任意表达式。 exp
我对此感到困惑snippet : var n1 = 5-"4"; var n2 = 5+"4"; alert(n1); alert(n2); 我知道 n1 是 1。那是因为减号运算符会将字符串“4”转
我想我会得到 12,而不是 7。 w++,那么w就是4,也就是100,而w++, w 将是 8,1000;所以 w++|z++ 将是 100|1000 = 1100 将是 12。 我怎么了? int
Xor 运算符 对两个表达式进行逻辑“异或”运算。 result = expression1 Xor expression2 参数 result 任意数值变量。 expression1
Mod 运算符 两个数值相除并返回其余数。 result = number1 Mod number2 参数 result 任意数值变量。 number1 任意数值表达式。 numbe
Imp 运算符 对两个表达式进行逻辑蕴涵运算。 result = expression1 Imp expression2 参数 result 任意数值变量。 expression1 任
Eqv 运算符 执行两个表达式的逻辑等价运算。 result = expression1 Eqv expression2 参数 result 任意数值变量。 expression1 任
我有一个运算符重载的简单数学 vector 类。我想为我的运算符(operator)获取一些计时结果。我可以通过计时以下代码轻松计时我的 +=、-=、*= 和/=: Vector sum; for(s
我是用户定义比较运算符的新手。我正在读一本书,其中提到了以下示例: struct P { int x, y; bool operator、运算符<等),我们
在 SQL 的维基百科页面上,有一些关于 SQL 中 bool 逻辑的真值表。 [1] 维基百科页面似乎来源于 SQL:2003 标准。 等号运算符 (=) 的真值表与 SQL:2003 草案中的 I
我遇到了一个奇怪的 C++ 运算符。 http://www.terralib.org/html/v410/classoracle_1_1occi_1_1_number.html#a0f2780081f
我正在阅读关于 SO 和 answers 中的一个问题,它被提到为: If no unambiguous matching deallocation function can be found, pr
我偶然发现了这个解决方案,但我无法理解其中到底发生了什么。谁能解释一下! 据我了解,它试图通过计算一半的单元格然后将其加倍来计算 a*b 网格中的单元格数量。但是我无法理解递归调用。 请不要建议其他解
Go的基本类型 布尔类型bool 长度:1字节 取值:布尔类型的取值只能是true或者false,不能用数字来表示 整型 通用整型 int / uint(有符号 / 无符号,下面也类似) 长度:根据运
在本教程中,您将学习JavaScript中可用的不同运算符,以及在示例的帮助下如何使用它们。 什么是运算符? 在JavaScript中,运算符是一种特殊符号,用于对运算数(值和变量)执行操作。例如,
我是一名优秀的程序员,十分优秀!