按位“与”、“或”、“异或”运算的使用场景有什么?
闭关修行中......
異或運算是密碼學的核心運算之一。
很多對稱加密都是基於異或運算。
他們都是二進制運算符,都是彙編下概念,一般來講,用不上。 但是由於他們較為底層的運算符,所以運算起來速度飛起,在常規操作中也能用上。 例如:與運算子一般用來清零。 與運算子可以用來轉換一個整數到短整數(實際上是把dword轉為word)。
0xffffeeee&0xffff=0xeeee
或運算一般用來補碼。 例如一個整數型是4個位元組,32個位元組,就表示他能做一個容納32位元的配置所在。 (TRUE/FALSE),这个时候可以用或來將某位置1。
TRUE
FALSE
或
異或一般用來加密除此之外還有左移當乘法,右移當除法等奇淫異巧。
這方面知識點太多了,一般沒必要特意學習。如果對二進制了解多的話自然就明白了。老實講,有一定難度。 我打了半天字,估計能看懂的也沒幾個。 。
位元運算在嵌入式和驅動程式設計方面運用的更多一點,有關直接操作暫存器的情況下會用上,在應用層方面貌似並不多。 不過我印像中倒是有很多奇淫技巧會用上,我印象最深刻的是leetcode上面的一道題:LeetCode 136. Single Number
題目很簡單,要求是找出唯一一個在陣列中出現一次的整數,而其他都會出現兩次。
通常的想法都是打表,然而數組大了之後速度很慢,然後就有了按位異或的演算法。 直接把數組的所有數字按位異或,最後剩下的那個數字就是所求,至於是為什麼可以去網上搜看。
舉個實際場景中的例子配置一個位元組中某幾位的值。 範例:要設定這個變數的某一位,用位元或a = a|0x01 ,這是設定了最後一位,要提取某一位的值,可以用按位與b = a&0x01 這是提取最後一位的值。
位元遮罩、點陣圖等
二進位格式處理(例如TCP header)
密碼學
異或運算是密碼學的核心運算之一。
很多對稱加密都是基於異或運算。
他們都是二進制運算符,都是彙編下概念,一般來講,用不上。
但是由於他們較為底層的運算符,所以運算起來速度飛起,在常規操作中也能用上。
例如:
與運算子一般用來清零。
與運算子可以用來轉換一個整數到短整數(實際上是把dword轉為word)。
或運算一般用來補碼。
例如一個整數型是4個位元組,32個位元組,就表示他能做一個容納32位元的配置所在。 (
TRUE
/FALSE
),这个时候可以用或
來將某位置1。異或一般用來加密
除此之外還有左移當乘法,右移當除法等奇淫異巧。
這方面知識點太多了,一般沒必要特意學習。如果對二進制了解多的話自然就明白了。老實講,有一定難度。
我打了半天字,估計能看懂的也沒幾個。 。
位元運算在嵌入式和驅動程式設計方面運用的更多一點,有關直接操作暫存器的情況下會用上,在應用層方面貌似並不多。
不過我印像中倒是有很多奇淫技巧會用上,我印象最深刻的是leetcode上面的一道題:
LeetCode 136. Single Number
題目很簡單,要求是找出唯一一個在陣列中出現一次的整數,而其他都會出現兩次。
通常的想法都是打表,然而數組大了之後速度很慢,然後就有了按位異或的演算法。
直接把數組的所有數字按位異或,最後剩下的那個數字就是所求,至於是為什麼可以去網上搜看。
舉個實際場景中的例子
配置一個位元組中某幾位的值。
範例:
要設定這個變數的某一位,用位元或a = a|0x01 ,這是設定了最後一位,要提取某一位的值,可以用按位與b = a&0x01 這是提取最後一位的值。
位元遮罩、點陣圖等
二進位格式處理(例如TCP header)
密碼學