逻辑 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。