陳力:傳智播客古代 珍寶幣 泡泡龍遊戲開發第27講:PHP位運算
陳力:傳智播客古代 珍寶幣 泡泡龍遊戲開發第27講:PHP位運算
PHP程式設計語言中有哪些位運算,二進位制的原碼、反碼、補碼等怎麼表示。按位與&、按位或|、按位異或^、按位取反~,算術左移、算術右移等都是貴陽網站建設中必須掌握的內容。本節為陳力:傳智播客古代 珍寶幣 泡泡龍遊戲開發第27講:PHP位運算
一、二進位制
二進位制(Binary)是逢2進位的進位制,0、1是基本算符。所謂二進位制就是逢二進一(0,1),因為使用二進位制只有0、1兩個數,簡單,易於電子方式實現,同時,通過0、1 組合可以表示任意一個數。
現代的電子計算機技術全部採用的是二進位制,因為它只使用0、1兩個數字符號,非常簡單方便,易於用電子方式實現。計算機內部處理的資訊,都是採用二進位制數來表示的。二進位制(Binary)數用0和1兩個數字及其組合來表示任何數。進位規則是“逢2進1”,數字1在不同的位上代表不同的值,按從右至左的次序,這個值以二倍遞增。
網上對原碼、反碼、補碼的解釋過於複雜,本文在貴陽網站建設中總結出以下精簡的幾句話:
對於有符號的而言:
①二進位制的最高位是符號位: 0表示正數,1表示負數。
②正數的原碼、反碼、補碼都一樣。
③負數的反碼=它的原碼符號位不變,其它位取反(0->1,1->0)。
④負數的補碼=它的反碼+1。
⑤0的反碼、補碼都是0。
⑥php沒有無符號數,換言之,php中的數都是有符號的。
⑦在計算機運算的時候,都是以補碼的方式來運算的。
有關二進位制的三個重要的概念:
(1)原碼:用二進位制來表示一個數,這個碼就是原碼。
數字5的原碼錶示為 00000000 0000000 0000000 00000101 = 1*2的零次方+0*2的一次方+1* 2的二次方=1+0+4=5
(2)反碼:負數的反碼=它的原碼符號位不變,其它位取反(0變成1,1變成0)
-1的原碼 10000000 00000000 00000000 00000001
-1的反碼 11111111 11111111 11111111 11111110
-1 的補碼 11111111 11111111 111111111 11111111
(3)補碼:在計算機運算的時候,都是以補碼的方式來運算的。不管一個數是正數還是負數,都要被轉成補碼,然後進行運算。
二、位運算
位運算一覽表
在上圖中,前面四個是位運算。
其運算規則是:
按位與&:兩位全為1,結果為1。全1出1。
按位或|: 兩位中有一個為1,結果為1。有1出1。
按位異或^ :兩位一個為0,一個為1,結果為1。01出1,11出0,00出0。
按位取反~: 0變1 ,1變0。0出1,1出0。
例:~2=?
步驟1 :首先要求出 2的補碼
2是正數:原碼=反碼=補碼
2的原碼:00000000 00000000 00000000 00000010
步驟2:按位取反:
11111111 11111111 11111111 11111101。通過補碼也可以推出原碼。
補碼也可以推出原碼:由於負數的原碼-》反碼-》補碼,所以進行反推時,
11111111 11111111 11111111 11111101->
推出其反碼 :將補碼-1
11111111 11111111 11111111 11111100
推出原碼:符號位不變,再按位取反。
10000000 00000000 00000000 0000011 -> -3
所以結果為-3。
例:~-5=?
-5 的 補碼先求出來:
-5 原碼 10000000 00000000 00000000 00000101
-5 反碼 11111111 11111111 11111111 11111010
-5 補碼 11111111 11111111 11111111 11111011
~-5取反 00000000 00000000 00000000 00000100 (這結果也是補碼形式,要轉成原碼形式再輸出。因為符號位為正數,所以原碼、反碼和補碼都是一樣的。)
例:2&3=?
2&3 首先要找到 2 和 3的補碼
2 的補碼 00000000 00000000 00000000 00000010
3 的補碼 00000000 00000000 00000000 00000011
2&3 00000000 00000000 00000000 00000010 [結果也是補碼形式,因是正數無需再轉換]
例:2|3=?
2 的補碼 00000000 00000000 00000000 00000010
3 的補碼 00000000 00000000 00000000 00000011
2|3 00000000 00000000 00000000 00000011
例:2^3
2 的補碼 00000000 00000000 00000000 00000010
3 的補碼 00000000 00000000 00000000 00000011
2^3 00000000 00000000 00000000 00000001
可以手動計算:13&7=? 5|4=? -3^3=?
三、位移運算
在php程式設計語言中,位運算有兩種 >> (右移) <<(左移)。
運算的規則是:
算術右移:低位溢位,符號位不變,並用符號位補溢位的高位。
算術左移:符號位不變,低位補0。
根據前面的規範,來完成幾個案例:
$a=1>>2;
先求出1的補碼:
00000000 00000000 00000000 00000001
1>>2
00000000 00000000 00000000 00000000
例:$b=-1>>2;
步驟 -1 的補碼:
-1 的原碼 10000000 00000000 00000000 00000001
-1 的反碼 11111111 11111111 11111111 11111110
-1 的補碼 11111111 11111111 11111111 11111111
-1 >> 2
11111111 11111111 11111111 11111111 (補碼形式的,要轉換成原碼)
補碼->原碼:
反碼 11111111 11111111 11111111 11111110
原碼 10000000 0000000 00000000 00000001
結果為-1。
例:$c=1<<2;
先求出1的補碼:
00000000 00000000 00000000 00000001
00000000 00000000 00000000 00000100
結果為4。
【推薦閱讀】陳力:傳智播客古代 珍寶幣 泡泡龍遊戲開發第27講:PHP位運算
相關文章
- 陳力:傳智播客古代 珍寶幣 泡泡龍遊戲開發第四講:html表格元素遊戲開發HTML
- 陳力:傳智播客古代 珍寶幣 泡泡龍遊戲開發第十三講:盒子的定位例項遊戲開發
- 傳智播客PHP面試題寶典開放下載PHP面試題
- 傳智播客java培訓EMS2010-5-27Java
- 傳智播客Java培訓---JDBCJavaJDBC
- 傳智播客黑馬.NET+Unity3D 遊戲開發視訊教程Unity3D遊戲開發
- PHP 位運算使用PHP
- 泡泡龍不是消除遊戲?——泡泡龍的發展史遊戲
- 【傳智播客上海校區】TreeMap原始碼解析原始碼
- 傳智播客:人工智慧學習線路概況人工智慧
- 軟體工程系得到傳智播客的大力支援軟體工程
- 最新傳智播客nodejs入門到精通(全套視訊)NodeJS
- 傳智播客 java基礎 相關資料 Day1Java
- android位運算講解與實戰Android
- 傳智播客PHP2015-XML視訊教程 XML-01-xml介紹 筆記PHPXML筆記
- 傳智播客中JavaWeb程式設計任務教程的作業JavaWeb程式設計
- 二進位制、位運算、位移運算
- (位運算)兩個字串的位運算字串
- 位運算
- 馬士兵Java和傳智播客Java系列視訊教程免費下載Java
- 傳智播客上海校區:你為什麼一定要學Python?Python
- 【傳智播客上海校區】java類和物件的關係的通俗理解Java物件
- 傳智播客168期JavaEE就業班(第十一天 cookie session)Java就業CookieSession
- 理解位運算
- SQL位運算SQL
- 使用位運算進行加法運算
- [開發教程]第27講:Bootstrap選項卡(2)boot
- 2016傳智播客大資料第三期完整版大資料
- 資料分析實戰45講-陳暘-極客時間
- C#泡泡堂遊戲開發全套系列C#遊戲開發
- 傳智黑馬java基礎學習——day27Java
- 學習位運算
- 位運算進階
- 位運算總結
- 巧用JS位運算JS
- 位運算-異或(^)
- 天數智芯攜手龍蜥社群,以高效能算力助力開源發展
- 【備忘】傳智播客35期JavaEE工程師從基礎到實戰視訊Java工程師