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...