c 的位運算和邏輯運算

2021-05-25 00:13:59 字數 640 閱讀 3289

0. 因為很少使用位運算(與或非、移位以及對應的賦值操作),漸生一種神秘感,今天就把這層面紗揭去,看看他們的真面目。由於位運算和邏輯運算都有與或非操作,這裡看看他們的區別。

0.1  引入這些運算的原因

c++繼承自c,c使用位運算自然是為了提高效率,使得c可以像低階語言那樣實現bit-level的操作。使用邏輯運算是為了控制程式流程。

0.2 編譯器的優化

現代編譯器的優化功能不容小視,下面的彙編**都是編譯器優化後產生的。這些優化有些使我們吃驚,但卻解釋我們心中的疑惑。其中匿名區域性變數處理、常量運算求值和內聯函式展開和求值是常見的優化點。

1. 位運算

1.1 位的與或非

參與運算的兩個運算元必須為整形或其變體,運算元按位進行與或非操作。我們使用彙編**給出真相。對應的彙編**為,這個例子說明,0.1 不使用的區域性變數,編譯器不會為它生成**。 0.2 常量運算編譯器直接求值。 0.3  變數的運算只能在執行時完成,編譯器無法為其代勞。 1. 兩個長度不同的變數做位運算時,需要符號擴充套件長度較小的變數,兩運算元長度相同再運算。另外,c++所有的位運算都是算術的,這也體現在右移運算中。

1.2 移位運算

移位運算包括左移和右移運算,對運算元的要求同與或非。左移後空出的右邊由若干個0填補,右移後空出的左邊由若干個符號位填補。

C 邏輯運算 位運算

c gossip 邏輯運算 位運算 一 邏輯運算 在邏輯上有所謂的 且 或 與 反 運算,在c 中也提供這幾個基本邏輯運算所需的 邏輯運算子 logical operator 分別為 且 或 及 反相 三個運算子。來看看下面這個程式會輸出什麼?int num 75 cout num 70 num 8...

邏輯運算和位運算

本文主要針對的是邏輯運算 和位運算 關於移位預算,現在對開發來說基本不用,就不說了。邏輯運算主要是針對多個boolean表示式來說的,即a 1 b 2這種,就是說邏輯運算子左右都是boolean型別的表示式,這裡!是個特例,它是一元運算子,只對右邊boolean表示式取反,即!ture 變成了fal...

位運算和邏輯運算

public class test private static int j 0 private static boolean methodb int k j k return true public static void methoda int i methoda 0 system.out.pr...