本文目錄一覽:
- 1、請問php中$c=(-3)^3; echo $c;會輸出多少?為什麼?
- 2、怎樣在PHP中把16進制HEX數據轉換為2進制數據呢?
- 3、在PHP中,字母a和字母A的二進制,八進制,十進制,十六進制的寫法是什麼?
- 4、php 的位運算總結
- 5、PHP 什麼是二進制字符串
- 6、php中能輸出二進制數據么
請問php中$c=(-3)^3; echo $c;會輸出多少?為什麼?
php中$c=(-3)^3;
echo
$c;輸出-2.
因為^在php中是異或運算符,也就是說在二進制中1^1=0,0^0=0,1^0=1,0^1=1
我們用一個字節(即八位二進制數)為例:
3表示為二進制數是00000011
3的二進制反碼是11111100
3的二進制補碼是11111101(是3二進制數00000011的反碼加1)
-3表示為二進制數是11111101(是3二進制數00000011的補碼)
-3^3表示為二進制數的計算方法是:
00000011
(3)
11111101
(-3)
=11111110
(-2)
所以php中$c=(-3)^3;
echo
$c;輸出-2.
怎樣在PHP中把16進制HEX數據轉換為2進制數據呢?
十六進制轉為二進制有兩種理解方法,第一是十六進制字符串轉二進制字符串,第二是十六進制數轉二進制數,下面分別介紹2種轉換方法:
1.hex2bin函數可以將十六進制字符串轉換為二進制字符串,詳細用法如下:
hex2bin — 轉換十六進制字符串為二進制字符串
string hex2bin(string $data)
轉換十六進制字符串為二進制字符串。
參數:
data:十六進制表示的數據
返回值:
返回給定數據的二進制表示 或者在失敗時返回 FALSE。
異常:
如果輸入的十六進制字符串是奇數長數或者無效的十六進制字符串將會拋出E_WARNING 級別的錯誤。
示例:
$hex = hex2bin(“6578616d706c65206865782064617461”);
echo $hex;//example hex data(其中16進制代表的是ascii碼)
2.base_convert是真正意義上的進制轉換函數
base_convert — 在任意進制之間轉換數字
string base_convert( string $number, int $frombase, int $tobase)
返回一字符串,包含 number以 tobase 進制的表示。number 本身的進制由frombase指定。frombase 和 tobase 都只能在2 和 36 之間(包括 2 和 36)。高於十進制的數字用字母 a-z 表示,例如a 表示 10,b 表示 11 以及 z 表示 35。
參數:
number:要轉換的數字
frombase:原始進制
tobase:轉換後的進制
示例:
$hexadecimal = ‘A37334’;
echo base_convert($hexadecimal, 16, 2);//101000110111001100110100
在PHP中,字母a和字母A的二進制,八進制,十進制,十六進制的寫法是什麼?
字母”a”:
二進制:1100001
八進制:141
十進制:97
十六進制:61
你可以通過以下代碼來查看:
?php
$num = ord(‘a’);
//二進制
echo decbin($num),’,’;
//八進制
echo decoct($num),’,’;
//十進制
echo $num,’,’;
//十六進制
echo dechex($num),’,’;
php 的位運算總結
php的位運算很少會用到,但是用處很大,
在有些算法中會用到,在權限管理中也會經常用到,
對於理解計算機的世界也會有一定的幫助,所以得把這些重要但不常用的東西總結一下記錄一下。
提到位運算,避不開的是二進制。
因為位運算是直接在內存做操作和運算,相較與直接拿兩個變量做運算符肯定是更快的。
很多地方把二進制這玩意說得很晦澀,現在來以最簡單的方式來總結一下,當然只算 int 範圍內的數算了,超過了這個範疇程序員還不如拿這時間去學點別的。
說完以上總結,再來解釋下什麼是二進制,網上大把,
但只要記住,int範圍內的數也就是我們大部分需要用到的數,都可以用二進制來表示。
我們生活中用到的計數方式為十進制,由個數位滿10進1,
然後再開始重新計算,等十位滿9再加一時,百位加一,十位歸零。
二進制則只有兩個數字來表示就是0和1,滿2進1。
由32個位組成,雖然只有32個位但已滿足了我們正常的需求了
比如說1轉換為2進制原碼,由於1是正數所以符號位為0,
原碼反碼補碼都一個樣。
1的原碼:00000000 00000000 00000000 00000001
因手懶,太多0太丑用+拼接,’0* 8’代表8個0
2的原碼:0* 8 0* 8 0* 8 0* 6 + 1 0,既然是二進制,
滿2就得進1,最低位歸0,向前加一。
再來解釋下負數的原碼反碼和補碼,就開始講php的位運算了。
二進制複習完畢。下面開始講講php的位運算。
php一共有六種位運算,一種一種來講。
可以這麼理解,兩個數的補碼放在一起比較每個位(一共32個位),
可以得出另外一個數,這個數字的組成由比較的兩位數字生成,
如果兩個數的每個位數上的數字都等於1的話,
那得到的那個數的補碼的同位為1,否則為0。
聽着繞口,其實很簡單,覺得還是比官網上的更容易讓新手看懂
下面舉例子:
首先來求-1和7的補碼。7的原碼就是補碼。
兩個補碼都有了下面開始運算:
按照上面的說法, 每個位都有一樣則 $a 的同等位則為1,剛好-1的補碼和7的補碼前面都不一樣,就最後三位一樣,所以剛好求得的 $a 的補碼的最後三位是1而其他的都是0 ,剛好這個補碼為正數,正好就是7。
其實就是和按位與相反,只要有1個為1,那就為1,如果都不為1,那就為0。
$a = -1|7 ;得出來的 $a 補碼為32個1,但此時不能說 $a 就是-1,因為這只是補碼,要轉成原碼再轉成十進制數,補碼-1,然後再翻轉,再轉出來,得到的其實也還是-1。
就是將這個數的補碼全部翻轉過來,包括符號位,0變1,1變0
取反的結果一定是整數變負數負數變正數,取正數的反時,
記得一定要從補碼一步步轉到原碼再轉成十進制數才是答案。
兩個數的補碼比較,同等位上的兩數比較
,不一樣時,則答案的補碼的同位則為1,否則為0。
往左移符號位被擠走右邊0補充,往右移動,符號位不動,
高位以符號位補充。二進制世界裡往左移動其實是相當於乘以了2,
右移相當於除以了2。
不吹牛逼的說,這應該是互聯網上最容易理解的php位運算的解釋和二進制的解釋了。
原文鏈接: php的位運算總結-PHP
PHP 什麼是二進制字符串
二進制字符串是
字節字符串。非二進制字符串是字符字符串
這個體現在
mysql數據庫
中為:
BINARY和VARBINARY類類似於CHAR和VARCHAR,不同的是它們包含二進制字符串而不要非二進制字符串。也就是說,它們包含字節字符串而不是字符字符串。這說明它們沒有
字符集
,並且排序和比較基於列值字節的數值值。
BLOB
列被視為二進制字符串(字節字符串)。TEXT列被視為非二進制字符串(字符字符串)。
php中能輸出二進制數據么
可以的。
可以用一個十進制二進制的函數decbin(),生成的是一個字符串,直接輸出即可
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/283358.html