PHP關於按位取反結果的推導過程

2021-09-07 01:48:22 字數 856 閱讀 9479

哎呀幾年過去,都快把大學學的計算機導論的知識給忘完了,現在來回顧一下按位去反的流程:

<?php

/**首先來補充一下基礎知識:

php中有4個位運算,分別是&與 |或 ^異或 ~取反

& 兩位全為1,結果為1

| 有一位為1,結果為1

^ 乙個為0,乙個為1,結果為1

~ 取反0->1,1->0

1.二進位制的最高位是符號位,0表示正數,1表示負數。

2.正數的原碼,反碼,補碼都一樣。

3.負數的反碼=它的原碼符號位不變,其它位取反(0->1,1->0)。

4.負數的補碼=它的反碼+1。

5.0的反碼,補碼都是0.

6.php沒有無符號數,換言之,php中的數都是有符號的。

7.在計算機運算的時候,都是以補碼的方式來運算的,那麼運算完後得到的結果也是某個數的補碼

**/echo ~8;//-9

那麼這個-9是怎麼得來的呢?

8的原碼、反碼、補碼都是 :

00000000 00000000 00000000 00001000

取反(即~8)後得到:

11111111 11111111 11111111 11110111 //第一位是符號位,1代表負號,表示這是乙個負數;記住運算和運算結果都是用補碼表示的,這是某個數的補碼,我們還需要推導反碼和原碼

反碼=補碼-1,即:

11111111 11111111 11111111 11110110

原碼(符號位不變,其他位取反):

10000000 00000000 00000000 00001001

所以結果是:-9

?>

PHP匿點之位運算按位取反

我們看示例 a 8 var dump a 先不要看結果,試想下結果是多少?然後我們執行下看看,納尼?和我們設想的不一樣,奇怪了 什麼原因呢 於是我們翻看php中文手冊 a not 按位非 將 a 中為 0 的位設為 1,反之亦然。我只是簡單的理解為 0變1,1變0。原來按位取反以十進位制輸出並不是簡...

按位取反符號的介紹

前言 是我最近做面試題的時候遇到的符號,我不知道是什麼含義,上網上查詢之後才知道,下面我通過例題來說明這個符號使用之後的結果是什麼 例題 public class test what is the decimal value fo j at line5?a 0b 1 c 14 d 15 e an e...

python語言按位取反 python的按位運算

華電北風吹 天津大學認知科學與計算重點實驗室 最後修改日期 2015 8 6 python提供了豐富的位運算操作符,例如按位與,按位或,按位異或,左移位,右移位和取反操作,例子 如下 a,b 45,83 bin a bin b 0b101101 0b1010011 a b,bin a b 127,0...