最近在看密碼學的書籍,對二進位制運算提起了興趣,今晚總結了一下感覺別有所獲.
a,b兩個數進行位運算,情況如下: a
b 0 1
或 與
異或 或
與 異或
0 0
0 0
1 0
1 1
1 0
1 1
1 0
由上表總結一下兩個位元流ab二進位制運算的規律:
a|b,b位元位為1的位置對應的a處位元用1代替,其餘位元不變;
a&b,b位元位為0的位置對應a處位元用0代替,其餘位元不變;
a^b,b位元位為1的位置對應a處位元取反,其餘位元不變;
顯然ab交換順序不影響運算結果,但三種運算之間順序不能交換.
如果把ab之間的運算看作資料的加密,那麼或和與操作都損失了一部分資訊,是不可恢復的(因為原文a中一些位元被覆蓋了).而且」與」和」或」丟失的那部分資訊正好可以互補,也就是
a|b+a&b-b=a
這可以用來設計加密演算法,計算a|b+a&b的值作為密文c,而b作為金鑰k,解密時用c-k即可獲得明文a.由於b是隨機的,所以演算法也是安全的.異或則是可逆的,所以最常用來加密資訊.因為異或只是反轉了明文中的某些位元位而已,要想恢復a則只需異或兩次即可
a^b^b=a
a^0=a
a^0xff=~a(假設a為單位元組)
另外偶數個1異或為0,奇數個1異或為1,0位元對異或運算是透明的
二進位制運算
運算子 符號含義例子與 兩邊都為真時為真 1 1 1或 任何一邊為真時為真1 非取反 如果1則為0 如果0為1 1 0 異或 兩邊相同為1 兩邊不同為0 1 1返回false 1 2返回true 運算子符號含義 例子邏輯與 判斷兩邊 都為真時為真 true true true或 判斷兩邊 任何一邊為...
二進位制運算( )
負數轉化二進位制步驟 將負數取絕對值,得到其絕對值的二進位制 6取絕對值為6,6的二進位制 0110,然後補充0110位32位 000 000 0110 一共32位,即0110前面還有28個0 然後每位取反 111 111 1001 一共32位 接著對上面得到的二進位制 111 111 1001 進...
二進位制運算
一 運算子 按位與 按位或 按位異或 按位取反 按位左移 有符號的按位右移 無符號的按位右移 二 算術運算 二進位制數的算術運算包括 加 減 乘 除四則運算,下面分別予以介紹。1 二進位制數的加法 根據 逢二進一 規則,二進位制數加法的法則為 0 0 00 1 1 0 1 1 1 0 進製為1 1 ...