一、按位与/逻辑与
(一)按位与
1.符号
按位与&
运算符
2.介绍
1.按位与运算符“&
”是双目运算符
。
2.其功能
是参与运算的两数各对应的二进位相与
。
3.只有
对应的两个二进位都为1时,结果位才为1。
4.千万不要与 && 混淆
3.举例
(1)相同位与
首先把数转换为2进制
比如:
10 二进制为:1010
11 二进制为:1011
~~~~~ 1 ~~ 0 ~~ 1 ~~ 0
~~~~~ 1 ~~ 0 ~~ 1 ~~ 1
& ~ ————————
~~~~~ 1 ~~ 0 ~~ 1 ~~ 0
注意:有对应的两个二进位都为1时,结果位才为1
(2)不同位与
~~~~~ 1 ~~ 0 ~~ 1 ~~ 0
~~~~~~~~~~~~~~~~~~~~~~ 1
& ~ ————————
~~~~~~~~~~~~~~~~~~~~~~ 0
“与运算”的特殊用途:
-
清零
。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。 -
取一个数中指定位
方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。
例:设X=10101110,取X的低4位,用 X & 0000 1111 = 0000 1110 即可得到;
还可用来取X的2、4、6位。
(3)不同位宽截断和扩展
Verilog中不同位宽的无符号数和有符号之间赋值的截断和扩展问题
(二)逻辑与(短路与)
1.符号
逻辑与&&
运算符,逻辑与是短路操作符
2.介绍
逻辑与和短路与的区别:
-
逻辑与的判断方式是:
从左到右依次判断,直到结尾(逻辑全程运算) -
短路与的判断方式是:
从左到右依次判断,直到出现false为止将不再判断,直接得到结果为false(短路遇false就停)
3.举例
1&&2转换二进制1&&0010
1为true,2>0为true,故1&&0010=1;
console.log(a && 0); // ReferenceError: a is not defined
console.log(0 && a); //0, 因为是短操作符,第一个操作符0为false,第二个操作符不会执行(这里的变量a未定义)
console.log(2 && 1); //1,第一个操作数2是true,会计算第二个操作数,返回第二个操作数1
console.log(0 && 2); //0,第一个操作数0是false,直接返回0,不会管第二个操作数
console.log(2 && 0); //0,第一个操作数2是true,会计算第二个操作数
console.log(2 && 3); //3,第一个操作数2是true,会计算第二个操作数,第二个操作数3是true,返回3
console.log(NaN && NaN); //NaN,第一个操作数是NaN,不会管第二个操作数
console.log(null && null); //null,第一个操作数时null,不会管第二个操作数
console.log(undefined && undefined); //undefined,第一个操作数时undefined,不会管第二个操作数
文章评论