1、两者概念不同
&&是逻辑与:即判断&&两侧的表达式是否都为真,都为真则此&&表达式值为真;
& 是按位与:即将&两侧的数用二进制展开,每一位都求与运算(二进制与运算,跟逻辑与差不多),最后得到的二进制数即为结果;
2、两者结果不同
逻辑与结果只讲真和假,而按位与得出的却是实实在在的一个数。
以一个Verilog测试程序为例,说明两者之间的区别:
module test (CLK, AA, BB, CC, AOUT, BOUT, COUT, DOUT);
input CLK;
input[3:0] AA,BB,CC;
output AOUT,BOUT,COUT,DOUT;
reg AOUT;
reg BOUT;
reg COUT;
reg DOUT;
always @(posedge CLK)//检测时钟上升沿
begin : u1
if (AA && CC && BB)
begin
AOUT<=1'b1 ;
end
else
begin
AOUT<=1'b0 ;
end
end
always @(posedge CLK)//检测时钟上升沿
begin : u2
if (AA & CC & BB)
begin
BOUT<=1'b1 ;
end
else
begin
BOUT<=1'b0 ;
end
end
always @(posedge CLK)//检测时钟上升沿
begin : u3
if ((AA>5) && (CC<8) && (BB>4))
begin
COUT<=1'b1 ;
end
else
begin
COUT<=1'b0 ;
end
end
always @(posedge CLK)//检测时钟上升沿
begin : u4
if ((AA>5) & (CC<8) & (BB>4))
begin
DOUT<=1'b1 ;
end
else
begin
DOUT<=1'b0 ;
end
end
endmodule
上面三个always @()中分别用到如下三种if判断表达式
(AA && CC && BB)
(AA & CC & BB)
((AA>5) && (CC<8) && (BB>4))
((AA>5) & (CC<8) & (BB>4))
扩展资料:
对这四条表达式进行逻辑分析 :
1、(AA && CC && BB)
逻辑分析:
当AA、BB、CC都为非0数时,表达式为“1”。
怎么判断AA、BB、CC为非“0”,先分析一下为“0”的情况。
当AA为0的时候,AA等于4'b0,即每位都为0,即只需AA的4位矢量之间做一下“逻辑或”运算,AA[3] || AA[2] || AA[1] || AA[0],也可写成(|AA);
当4位矢量中只需有一位不为0,那么AA就必然不为“0”。
整个实现过程就是,先AA、BB、CC各自本身的各位之间做“逻辑或”运算,运算的结果之间做“逻辑与”运算。
2、(AA & CC & BB)
逻辑分析:
表达式(AA & CC & BB)等效为:
((AA[3] & BB[3] & CC[3]) || (AA[2] & BB[2] & CC[2]) ||
(AA[1] & BB[1] & CC[1]) || (AA[0] & BB[0] & CC[0]))
即只需要其中有一个表达式(AA[i] & BB[i] & CC[i]) 不为“0”,则整个结果就为“1” ,i取0到3。
3、((AA>5) && (CC<8) && (BB>4))
逻辑分析:
表达式(AA>5)、(CC<8)、(BB>4)结果均为1位的逻辑量,三个逻辑量之间做“逻辑与”。
4、((AA>5) & (CC<8) & (BB>4))
逻辑分析:
三个一位的逻辑量之间做“逻辑与”和“位与”是等效的。
按位与 赋值运算
&& 逻辑与 做条件判断用
while(a&&b)
{
}; 判断a和b与完后 是否为真 为真执行以后内容。
找本书 操作数类型 就明白了!