python算数、逻辑运算,位运算
-
算术运算符
对变量和数组进行算术运算。
算术运算符:+,-,*,/,%
+:将连个或者多个数值相加
-:将两个数值相减
*:将两个数值相乘
/:将两个数值相除
%:取相除的余数
-
赋值运算符
将右边的值(计算结果)赋值给左边的变量
赋值运算符:=,+=,-=,*=,/=,%=,.=
=:赋值,将右边的值赋值给左边的变量
+=:将左边的变量的值加上右边的结果之后,再将值赋值给左边的变量
-=,*=,/=,%=,.=都是一样的效果
注意!!!“.”十分特殊,表示一种字符串连接运算
抑制错误,不让错误出现
错误抑制符:@
三元运算符
参与运算的表达式有三个
语法:表达式1 ? 表达式2 : 表达式3
如果表达式1为真,那么计算表达式2,否则计算表达式3
<?php
$wenheichouwa = "ishere";
$res = ($wenheichouwa=="ishere")?"喜欢小烤肠和小松鼠":"喜欢昌仔";
echo $res."<br/>";
$duwa = &$wenheichouwa;
$duwa = "nothere";
echo $res."<br/>";
echo $wenheichouwa."<br/>";
echo $duwa."<br/>";
$res = ($wenheichouwa=="ishere")?"喜欢小烤肠和小松鼠":"喜欢昌仔";
echo $res."<br/>";
?>
-
自操作运算符
自己操作自己的运算符
自操作运算符:++,--
++:分为前置++和后置++,$a = $a + 1
前置++:++$a,
后置++:$a++
通常,在循环中,使用自运算比较,用户控制循环变量。
-
字符串运算符
连接字符串
字符串运算符:.和.=
$a = ‘hello ’;
$b = ‘world’;
.:表示两个字符串连接,不会改变原来的变量本身
$c = $a . $b;
.=:将两个字符串连接起来后再赋值给左边的变量
$a .= $b <===========> $a = $a . $b;
-
位运算符
针对系统硬盘上存储的位进行操作(实际操作是以字节为单位),位运算在计算过程中,每个位的操作返回的结果都是1或者0
位运算符:&,|,~,^,>>,<<
&:按位与,表示两个位都为1时,则返回1,否则返回0
|:按位或,表示两个有一个为1的时候,返回1,否则返回0
~:按位非,如果本身为0,则返回1,如果本身为1,则返回0
^:按位异或,如果两位不相同时,则返回1,如果两位相同则返回0
>>:按位右移,将整个字节向右移一位,左边空出来的使用0补充
<<:按位左移,将整个字节向左移一位,右边空出来的使用0补充
右移运算乃是原来的结果右移几位就除以几个2,然后向下取整,左移运算是原来的结果左移几位就乘以几个2;
<?php
$mynum=5;
echo "mynum左移5位的最终结果是".($mynum<<6)."<br/>";
$hisnum=6;
echo "hisnum右移2位的结果是".($hisnum>>2)."<br/>";
?>
-
原码,反码,补码
原码----一个数的二进制形式
反码----一个数二进制按位取反
补码----一个数二进制按位取反并加1,一个正数的原码,反码,补码都相同
存储的实际情况----正数以原码的形式存储,负数以补码的形式存储。
以整数1为例,我们知道php的整型数占4个字节,每个字节占8位,正数的原码,反码,补码又都相同,正数的最高位是0,所以对于1有 #原码 00000000 00000000 00000000 00000001 #反码 00000000 00000000 00000000 00000001 #补码 00000000 00000000 00000000 00000001
负数反码。补码的错误操作形式
而对于-1来说,按照既定原则,最高位应该为1,所以他的原码形式为 #原码 10000000 00000000 00000000 00000001 反码就是各位取反 #反码 01111111 11111111 11111111 11111110 补码就是反码各位再加1
01111111 11111111 11111111 11111110
+
00000000 00000000 00000000 00000001
=
01111111 11111111 11111111 11111111
但是问题显然出现了,最终结果 01111111 11111111 11111111 11111111 明显是个正数!
所以对于负数来说,他的反码形式是 最高位不动,其余的位取反
正确姿势,负数的反码最高位不变,其他位取反 -1的反码 #反码11111111 11111111 11111111 11111110 补码 = 反码+1 11111111 11111111 11111111 11111110 + 00000000 00000000 00000000 00000001 = 补码为 11111111 11111111 11111111 11111111
php提供了几常见进制之间转换的函数
二进制转为其他进制
binoct();//转为八进制
bindec();//转为十进制
binhex();//转为十六进制
八进制转为其他进制
octbin();//转为二进制
octdec();//转为十进制
octhex();//转为十六进制
十进制转为其他进制
decbin();//转为二进制
decoct();//转为八进制
dechex();转为十六进制
十六进制转为其他进制
hexbin();转为二进制
hexoct();//转为八进制
hexdec();//转为十六进制