C Primer Plus (第十五章)位操作

2021-10-03 03:45:27 字數 2305 閱讀 9143

按位取反: ~

unsigned

char tmp =2;

printf

("%d"

,~tmp)

;

2的二進位制是:0000 0010

取反後:1111 1101 解釋成補碼為:(等價於原碼1000 0011 = -3)

按位與:&

只有1 & 1 = 1, 其他都為0 , 即:全1為1,有0則0

按位或:|

只有0 | 0 = 0, 其他都為1,即:全0為0,有1則1

按位異或: ^

相同為0, 相異為1

0 ^ 0 = 0,1 ^ 1 = 00 ^ 1 = 1, 1 ^ 0 = 1&的應用:掩碼mask

不論是0還是1,和0進行與運算為0,和1進行與運算不變:

因此上mask後,0對應的位被消去,只有1對應的位保留:類似於用0掩蓋住原二進位制串上對應的位:結果是只有1對應的位被保留,其餘的位為0;

檢查位

目的:檢查mask中1對應位是否為1

先用掩碼(與上mask),得到第一次處理後的二進位制串(其餘不相干的位置為0),然後==判斷是否與mask相等:若相等說明mask中1對應的位也都是1,否則有的位檢查失敗

return

(a & mask)

== mask ? true : false;

關閉位(清空位)

類似於掩碼:用&將0對應位清空(置為0),一般先將mask取反,mask中1的位就是要關閉的位

a &

=~mask;

|的應用:開啟位(設定位)

無論0還是1,和1進行或運算為1:

因此上mask後,可將特定位置為1(on),用於對特定硬體傳送開啟命令

a |

= mask;

^的應用:切換位

無論0還是1,與0異或不變,與1異或「翻轉」:

因此異或上mask後,可將mask中1對應的位翻轉

a ^

= mask;

a << n //a左移n位
a >> n;

//a右移n位

a << n;

// 左移一位相當於*2: 左移n位相當於*2^n

a >> n;

// 如果a非負,右移一位相當於/2:右移n位相當於/2^n

可以利用移位+掩碼:來提取某個或某些位

獲得int 的二進位制:並實現將低n位翻轉的函式

#include

#include

//提供char_bit:本機乙個位元組的位數(通常為8)

第十五章預習

public class yuxi15 else 字串的比較 字串1.equals 字串2 比較兩個字串的值是否相同,返回boolean型別的值.如果相同,則返回真值,否則返回假值.字串1.equalsignorecase 字串2 忽略大小寫比較字串1和字串2.如果都相同則返回真值 否則返回假值 改...

learn with python 第十五章 繼承

第十六章 繼承 16.1繼承 物件導向語言所擁有的特性是繼承,繼承指定義乙個新的類擁有原來類的方法。繼承最大的好處就是可以在不改變現存 的情況下新增新的方法,稱之為繼承是因為新定義的類擁有父類的所有方法。新建立的類知之為子類。繼承是乙個功能強大的特性,某些情況下如果沒有繼承,一些層序幾乎無法實現。同...

第十五章 磁碟管理

uuid 掛載點swap 產品型別swap 掛載選項預設值default 預設不檢測,檢測順序 0 0 檢視分割槽 swapon s s表示show 手動掛載 swapon dev sda3 缺點 重啟後就消失,想永久生效,寫配置檔案 解除安裝分割槽 swapoff dev sda3 vim etc...