逻辑和/或和/和/或?有什么区别?

时间:2015-10-23 16:19:02

标签: bit-manipulation verilog logical-operators

假设a= 4'b1110, b= 4'b0010

A&& amp;和B和A& B和A || B和A |之间有什么区别B'每个人的结果是什么以及如何完成?

我尝试在SO上阅读一些问题/答案,但我找不到任何确定的答案。

2 个答案:

答案 0 :(得分:3)

logical纯粹使用true / false值。组件位是无关紧要的,只有全零(假),而不是全零(真)。

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

答案 1 :(得分:1)

通过创建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

/*

Output:

a&b  = 'b0010
a&&b = 'b1
a|b  = 'b1110
a||b = 'b1

*/

有关Verilog运算符的详细信息,请参阅IEEE Std 1800-2012。