首页 > 编程知识 正文

单目运算符和一元运算符,算术双目运算符

时间:2023-05-05 05:08:57 阅读:226497 作者:4920

今天在看狂野的世界的代码的时候发现了如下的代码always @ (posedge clk or negedge rst_n) begin if (!rst_n) data <= 14'b0; else if (state == CNV) if ((|bit_cnt[4:1]) && (~&bit_cnt[4:1]) && time_cnt[0]) data <= {data[12:0],miso}; elsedata <= data; end

        对第二个if else循环中的&、|有疑问,明明这两个在verilog中都是双目运算符,为什么在这里只有一侧有操作数,后来在其他博主那里看到,原来这样的用法叫做“一元约简运算符”。

1.一元约简运算符解释

        这种运算符和位运算符的符号是一模一样的,但是仍然能够正常阅读而不产生歧义,一元约简运算符是将后面的多位操作数依次进行位运算。

2.例子 |4'b1010 //1 | 0 | 1 | 0 即为1.|4'b0010 //0 | 0 | 1 | 0 即为1.|4'b1000 //1 | 0 | 0 | 0 即为1.&4'b1010 //1 & 0 & 1 & 0 即为0.&4'b0010 //0 & 0 & 1 & 0 即为0.&4'b1000 //1 & 0 & 0 & 0 即为0. 3.图一代码解释

        |bit_cnt[4:1] 代表从bit_cnt的第4位开始,依次进行或运算至第1位,得出最终结果。

        ~&bit_cnt[4:1] 代表从bit_cnt的第4位开始,依次进行与运算至第1位,然后再进行取反运算得出最终结果。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。