如题,正在学习C语言,其中有个知识点是按位运算,跟着书上的介绍和动手去写示例程序明白白其中的原理了。就是对存储在内存中的一个或两个值的位进行运算,也会对两个值进行按位与、按位或、取反等的操作。
自己一点粗略的理解是通过对内存的直接操作可以节省资源提高效率。
请问这个知识点的应用点是在哪里?比如:最常用在什么场景中,大概哪类程序中?再能举几个例子最好拉。
补充:感谢大家的热心回答,基本能解除我的疑惑了。
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
例如一個三十二位的數,每一位代表一種中斷,那麼去清零某一位就是用與,如果要置位某一位就用或。
可以用移位的運算優化效率,可以用1bit的空間做flag
例如有一個8位二進制整數,每一位的1代表通電,0代表斷電,我們要讓8個開關挨個通斷電就需要用位運算了,可以去找單片機的代碼看看
如果用位移來計算,最好交給編譯器優化,如x位常用的一個就是標誌位,例如一個功能有哪些特性,可以用位來表示。 如flag1=0x1flag2=0x2flag3=0x4flag4=0x8if(flag&flag3){.....
位元運算的意義在於運作效率通常比加減乘除高幾倍到幾十倍,在很關心速度的演算法中常常會採用,例如許多比較底層的演算法。缺點是可讀性和可維護性差。範例可以看這個網頁:https://graphics.stanford.edu/~seander/bithacks.html
此外,用整數表示集合,用位元運算進行集合運算,也是一種常見的用法。
認同 @__simple 的說法,單晶片中的置位(1)和清零(0)可以透過與另外一個量來運算取得
總的來說,為運算節省空間,速度快,應用的範例有1.點陣圖索引。比如說qq號或電話號碼的去重和查詢;2.位元遮罩。典型的是linux檔案權限;3.產生偽隨機數;4.格雷碼
用來設定物件的屬性
例如在給單晶片寫程式碼時,要給某個暫存器賦值,使用位元運算顯然要簡單有效率。
例如一個三十二位的數,每一位代表一種中斷,那麼去清零某一位就是用與,如果要置位某一位就用或。
可以用移位的運算優化效率,可以用1bit的空間做flag
例如有一個8位二進制整數,每一位的1代表通電,0代表斷電,我們要讓8個開關挨個通斷電就需要用位運算了,可以去找單片機的代碼看看
如果用位移來計算,最好交給編譯器優化,如x位常用的一個就是標誌位,例如一個功能有哪些特性,可以用位來表示。
如
flag1=0x1
flag2=0x2
flag3=0x4
flag4=0x8
if(flag&flag3){
....
.
位元運算的意義在於運作效率通常比加減乘除高幾倍到幾十倍,在很關心速度的演算法中常常會採用,例如許多比較底層的演算法。缺點是可讀性和可維護性差。範例可以看這個網頁:https://graphics.stanford.edu/~seander/bithacks.html
此外,用整數表示集合,用位元運算進行集合運算,也是一種常見的用法。
認同 @__simple 的說法,單晶片中的置位(1)和清零(0)可以透過與另外一個量來運算取得
總的來說,為運算節省空間,速度快,應用的範例有
1.點陣圖索引。比如說qq號或電話號碼的去重和查詢;
2.位元遮罩。典型的是linux檔案權限;
3.產生偽隨機數;
4.格雷碼
用來設定物件的屬性
例如在給單晶片寫程式碼時,要給某個暫存器賦值,使用位元運算顯然要簡單有效率。