C 和Verilog的運算子比較

2021-10-05 11:18:54 字數 1833 閱讀 7523

c++ 的位運算 與 verilog有相似之處,也有區別。

c++ 的& |  是雙目操作,表示按bit對每一bit都進行& |操作; verilog 不僅可以是雙目操作(雙目操作 同c++),還可以是單目操作,表示 對自己本身按位 與操作、按位或操作。比如 wire [5:0] test_v = 6』b101011, |test_v = 1』b1, &test_v = 1』b0。(c++的&| 不能是單目操作)

c++ 和verilog中的 ~ 都是單目運算子,按位取反,就是單純的每bit都進行01翻轉。

比如verilog,wire [5:0] test_v = 6』b101011,  ~test_v = 6』b010100。 wire test_v_bit =0,  ~test_v_bit = 1。

比如c++,unsigned int test_c = 0, ~test_c = 4294967295,也就是ffffffff。

需要注意的是,如果c++中對bool變數求~,會出現問題。比如,bool  test_c_bit = 0; ~test_c_bit = -1, test_c_bit = 1; ~test_c_bit = -2。這個結果跟我們想的怎麼不太一樣呢。

這是因為:c++中的bool型別雖然只用1bit就可以表示0和1的值,但在記憶體儲存時占用1byte,高7bit初始為0,平時我們用不到罷了。在執行~test_c_bit時,會將8bit全部進行01翻轉,當test_c_bit值為0時,0x00翻轉變成了0xff,正好是有符號數-1的十六進製制表示。test_c_bit值為1時,0x01翻轉變成了0xfe,為 有符號數-2的十六進製制表示。

c++的移位操作 同 verilog,不過要注意c++的變數型別,是否帶有符號標準位。

運算子c++

verilog

雙目位運算,按位 與運算,結果位數不變

例:0xf0 & 0x8f = 0x80

雙目位運算,按位&  同c++

單目操作,對自身按位

&,例:

wire [5:0] test_v = 6』b101011

,&test_v = 1』b0 i

雙目位運算,按位 或運算,結果位數不變

例:0xf0 | 0x8f = 0xff

雙目位運算,按位|  同c++

單目操作,對自身按位|,例:wire [5:0] test_v = 6』b101011, |test_v = 1』b1

雙目位運算,按位異或

異或運算:相同為0,不同為1

例:0xf0 ^ 0x8f = 0x7f

雙目位運算,按位異或,同c++

單目位運算,按位取反

不要對bool變數進行此操作,否則結果錯誤。

單目位運算,按位取反

左移,位運算子

同c++

右移,位運算子

同c++

雙目,邏輯運算子,與,結果是bool值

同c++,結果是1bit的值

雙目,邏輯運算子,或,結果是bool值

同c++,結果是1bit的值

單目,邏輯運算子,取非

例bool a = false, !a = true

同c++

,但一般好像用的很少,更多時候,直接用~

c++無

拼接運算子

拼接運算子

例    5

賦值運算子,

c++沒有阻塞賦值和非阻塞賦值的說法

非阻塞賦值 無

阻塞賦值

算術運算子 

c++ 同verilog

關係運算子

c++ 同verilog

條件運算子 ?:

c++ 同verilog

verilog運算子優先順序 參考

5 算術運算子和比較運算子

select product name,sale price,sale price 2 as sale price x2 from product 運算是以行為單位執行的 法則2 6 select子句中可以使用常數或者表示式 所有包含null的計算,結果肯定是null 通常情況下,類似5 0這樣除數...

js 算術運算子和比較運算子

自增1 自減單獨使用的 字首和字尾都是自增自減,沒有什麼特別卻別 和其他表示式一起使用是,作為字首,先自增自減,再做其他操作 作為字尾,先做其他操作再自增自減 var num 5 num 相當於 num num 1 console.log num 4 num console.log num 5 nu...

賦值運算子 比較運算子 和邏輯運算子

基本賦值運算子就是乙個符號 代表將左邊的資料交給左側的變數。int a 30 符合復合賦值運算子 a 3 相當於 a a 3 b 4 相當於 b b 4 c 5 相當於 c c 5 d 6 相當於 d d 6 7 7 相當於 e 7 7 int a 10 a 5 system.out.println...