逻辑 and/or 和按位 and/or 有什么区别?
What is the difference between a logical and/or and a bit-wise and/or?
假设a= 4'b1110, b= 4'b0010
A && B 和 A & B 有什么区别,A ||B 和 A | 有什么区别乙?他们每个人的结果是什么,是如何完成的?
我试着阅读了一些关于 SO 的 questions/answers 但我找不到任何明确的答案。
logical
纯粹处理 true/false 值。组件位无关紧要,只有全零 (false) 和非全零 (true)。
bitwise
完全顾名思义 - 它考虑了各个位。
a = 42 00101010
b = 23 00010111
c = 0 00000000
a || b -> true a && b -> true
a | b -> 63 a & b -> 2
a || c -> true a && c -> false
a | c -> 42 a & c -> 0
更详细:
a || b -> 00101010
|| 00010111
-----------
00111111 -> 63, which is non-zero, therefore -> TRUE
a | b
是完全一样的,但是因为它只处理位,所以计算停止在63
。
a && b -> 00101010
&& 00010111
-----------
00000010 -> 2 -> non-zero, therefore -> TRUE
如果我们加入d = 21
:
a && d -> 42 && 21 -> 00101010
&& 00010101
-----------
00000000 -> all-zeroes, therefore false
这是通过创建 Verilog 测试平台和 运行 模拟来完成的:
module tb;
reg [3:0] a, b;
initial begin
a= 4'b1110;
b= 4'b0010;
$display("a&b = 'b%b", a&b);
$display("a&&b = 'b%b", a&&b);
$display("a|b = 'b%b", a|b);
$display("a||b = 'b%b", a||b);
#5 $finish;
end
endmodule
输出:
a&b = 'b0010
a&&b = 'b1
a|b = 'b1110
a||b = 'b1
有关 Verilog 运算符的更多详细信息,请参阅 IEEE 标准 1800-2012。
假设a= 4'b1110, b= 4'b0010
A && B 和 A & B 有什么区别,A ||B 和 A | 有什么区别乙?他们每个人的结果是什么,是如何完成的?
我试着阅读了一些关于 SO 的 questions/answers 但我找不到任何明确的答案。
logical
纯粹处理 true/false 值。组件位无关紧要,只有全零 (false) 和非全零 (true)。
bitwise
完全顾名思义 - 它考虑了各个位。
a = 42 00101010
b = 23 00010111
c = 0 00000000
a || b -> true a && b -> true
a | b -> 63 a & b -> 2
a || c -> true a && c -> false
a | c -> 42 a & c -> 0
更详细:
a || b -> 00101010
|| 00010111
-----------
00111111 -> 63, which is non-zero, therefore -> TRUE
a | b
是完全一样的,但是因为它只处理位,所以计算停止在63
。
a && b -> 00101010
&& 00010111
-----------
00000010 -> 2 -> non-zero, therefore -> TRUE
如果我们加入d = 21
:
a && d -> 42 && 21 -> 00101010
&& 00010101
-----------
00000000 -> all-zeroes, therefore false
这是通过创建 Verilog 测试平台和 运行 模拟来完成的:
module tb;
reg [3:0] a, b;
initial begin
a= 4'b1110;
b= 4'b0010;
$display("a&b = 'b%b", a&b);
$display("a&&b = 'b%b", a&&b);
$display("a|b = 'b%b", a|b);
$display("a||b = 'b%b", a||b);
#5 $finish;
end
endmodule
输出:
a&b = 'b0010
a&&b = 'b1
a|b = 'b1110
a||b = 'b1
有关 Verilog 运算符的更多详细信息,请参阅 IEEE 标准 1800-2012。