c#的乙個好處就是幾乎完全不用與二進位制有關的東西和記憶體打交道,一切都是物件,一切都是十進位制。突然轉到c++,有點無所適從。現在記錄一下半個月集中學習c++和directx的一些經驗。
1、或運算(or)符號:「|」 ,與運算(and)符號:「&」。
在window7系統自帶計算器的程式設計師模式下可以找到這兩個運算子。windows7的計算器相當好用,輸入的任何數都可以直觀的表示出對應的二進位制轉換。
在c#中我們知道:
1 | 0 = 1
0 | 1 = 1
1 | 1 = 1
1 & 0 = 0
0 & 1 = 0
1 & 1 = 1
可以總結為:
與運算:兩個數只要有乙個為零則為零。
或運算:兩個數只要有乙個為一則為一。
這一法則不僅適用0和1,而且適用於任何數。
任意兩個數 458 和 921 對應的二進位制轉換為:111001010,,1110011001。
運用上述法則:
0111001010 &
1110011001 =
0111001010 |
1110011001 =
以上是基礎知識。
directx中有許多方法的引數名類似 xxflag之類的東西。這時可以傳入一些常量的或運算組合。比如:
lpdd->setcooperativelevel(main_window_handle,
ddscl_allowmodex | ddscl_fullscreen |
ddscl_exclusive | ddscl_allowreboot);
這種方法很有智慧型,這些常量的值轉換為二進位制並進行與運算後就可以在乙個數裡面儲存多個資訊,比如
ddscl_allowmodex = 1; //二進位制:0001
ddscl_fullscreen = 2; //二進位制:0010
ddscl_exclusive = 4; //二進位制:0100
ddscl_allowreboot = 8; //二進位制: 1000
ok,接下來把這四個選項進行與運算
= 1111
任意數量的選項的任意組合都不會重複,而且非常容易判斷是否包含乙個值.
判斷方法就是用到與運算
int group = ddscl_exclusive | ddscl_allowreboot;
現在我想判斷 group裡是否有包含ddscl_exclusive .
if (group & ddscl_exclusive)
//包含
}else
//不包含
}原理很簡單.
ddscl_exclusive | ddscl_allowreboot =
0100 |
1000 =
1100 &
0100 =
0100 != 0 則為true
1100 &
1000 =
1000 != 0 則為true
而我們拿這個值和乙個不包含在這個值裡的數字進行與運算:
1100 &
0010 =
0000 = 0 則為false
2、移位運算子
左移: <<
右移:>>
很形象,很直觀。
左移就是把乙個數的二進位制轉換向左移動指定的位數。比如乙個數
11111 << 1
把數11111向左移一位
結果為: 111110
同樣的道理,把11111向右移一位
11111 >> 1
結果為: 1111
從二進位制的角度來看十分簡單.但如果轉換到十進位制就會有點困惑了.
其實從十進位制角度來看也是有一規律的.
11111的十進位制轉換為31,左移一位的結果為62,左移兩位的結果為124,左移三位的結果為:248.
規律出來了,左移1位等於乘以2,左移兩位等於乘以2再乘以2,左移三位等於乘以2乘以2再乘以2
即左移位結果等於被移位數乘以2的移位數次方.
反過來右移就是做除法了.即右移位結果等於被移位數除以2乘以移位數次冪
《Windows遊戲程式設計大師技巧》一 學海無涯
偶然發現了本很棒的遊戲程式設計入門書 windows遊戲程式設計大師技巧 說是大師技巧,其實還是很深入淺出的。它涵蓋了windows圖形程式設計的方方面面,從win32的helloworld程式,到gdi簡介,再到directx的api。很適合我 這種windows程式設計的菜鳥,所以很喜歡這本書的...
《Windows遊戲程式設計大師技巧》一 學海無涯
偶然發現了本很棒的遊戲程式設計入門書 windows遊戲程式設計大師技巧 說是大師技巧,其實還是很深入淺出的。它涵蓋了windows圖形程式設計的方方面面,從win32的helloworld程式,到gdi簡介,再到directx的api。很適合我 這種windows程式設計的菜鳥,所以很喜歡這本書的...
3D遊戲程式設計大師技巧 環境搭建
剛開微博,想借助這個平台與大家交流,寫下自己的學習記錄,希望得到大家的批評指正。好了,進入主題。這段時間對遊戲程式設計很感興趣,於是在的推薦下開始學習 3d遊戲程式設計大師技巧 這本書。今天來說一下環境搭建。由於這本書還是有點年代的,而且它的 是基於作者的前一本書 windows遊戲程式設計大師技巧...