本文目录一览:
1、[请问php中$c=(-3)^3; echo $c;会输出多少?为什么?](#请问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
:要转换的数字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 什么是二进制字符串
二进制字符串是字节字符串。非二进制字符串是字符字符串。 这个体现在mysql数据库中为:
BINARY
和VARBINARY
类类似于CHAR
和VARCHAR
,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。BLOB
列被视为二进制字符串(字节字符串)。TEXT
列被视为非二进制字符串(字符字符串)。
php中能输出二进制数据么
可以的。
可以用一个十进制二进制的函数decbin()
,生成的是一个字符串,直接输出即可。