运算符的特殊用法

前言

这些运算符的使用,在这里默认是在php环境中

一、^

介绍:^表示异或运算
异或运算规则:将十进制转换为二进制后异或

0^0 = 0
1^0 = 1
0^1 = 1
1^1 = 0
即同为假,异为真(同假异真)

例如:10^24
计算过程:

10^24运算步骤:
(1)先将1024分别转换为二进制:1010^11000,转化一下就是01010^11000
(2)按规则进行异或运算:
01010
11000
结果为:10010,转换为十进制为18

Tip:0^未知数,结果都是未知数

二、~

介绍:~表示取反运算,即将二进制取反,例:0000,去反后为1111,但常常并不是这样使用,通常如下:
例如:~9,但它的值为-10,why?
取反运算规则:
1、原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1
2、补码计算
(1)正数的补码表示:正数的补码 = 原码
(2)负数的补码 = {原码符号位不变} + {数值位按位取反后+1} or = {原码符号位不变} + {数值位从右边数第一个1及其右边的0保持不变,左边按位取反}
具体可以参考:https://zhidao.baidu.com/question/148760603.html
计算过程:

~9计算过程:
(1)9转二进制:0 1001	//左边的0表示9这个数字是正数
(2)计算补码:0 1001	//因为9是正数,所以补码为原码,注意,原码是1001
(3)按位取反运算:1 0110	//符号位也要取反,这是取反的补码
(4)接上面再次取反:1 1001	//此时符号位不需要取反,只需要取一次即可
(5)末位加11 1010	//1001最后一位加1,由于是2,大于1,就变0,向前进1,前面的0变1
(6)还原源码:-10	//1 1010中1表示负号,1010二进制转十进制表示10,所以~9最后的结果为-10
~-9计算过程
(1)9转二进制:1 1001	//左边的1表示-9这个数字是负数
(2)计算补码:1 0111	//因为-9是负数,所以补码为{原码符号位不变}+{数值位从右边数第一个1及其右边的0保持不变,左边按位取反},即1 0111;注意,原码是1001
(3)取反运算:0 1000	//符号位也要取反,这是取反的补码
(4)再次取反:0 0111	//此时符号位不需要取反,只需要取一次即可
(5)末位加10 1000	//0111最后一位加1
(6)还原源码:8	//0 1000中0表示正号,1000二进制转十进制表示8,所以~-9最后的结果为8

Tip:最后总结一下,如果想要666或者999等指定的,可以直接~~666或~~999
参考:https://blog.csdn.net/liu940204/article/details/51115704

三、<<或>>

介绍:左移运算是将一个二进制位的操作数按指定移动的位数向左移位,移出位被丢弃,右边的空位一律补0。右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位一律补0,或者补符号位,这由不同的机器而定。
参考:百度百科
例:10<<3和10>>3
计算过程:

10<<3运算步骤:
(1)10转换为二进制:1010
(2)二进制数全部向左移动三位,被移动的位被丢弃,右边的空位一律补0,在这里相当于最右边的0移到了最左边1的位置:1010000,这里也就是在右边加30
(3)最后将二进制转换为十进制,结果为80

10>>3
(1)10转换为二进制:1010
(2)二进制数全部向右移动3位,被移动的位被丢弃,左边移出的空位一律补0,在这里相当于1走到了最右边0的位置:0001
(3)最后将二进制转十进制,结果为1

Tip:向哪边移,就以二进制数值与所移方向相反的第一个数为起始点移动,不比较好理解,例如>>向右移,我就以二进制数最左边的第一个数为起始点移动

四、&

介绍:&表示位运算符,将数值转换为二进制数,并进行与运算
与运算的规则:0&0=0;0&1=0;1&0=0;1&1=1,即两位同为1,结果为1,否则为0
例:10&24
计算过程:

10&24运算步骤
(1)转二进制:1010&11000,即01010&11000
(2)与运算:
01010
11000
结果为:01000,转换为十进制为8

参考:https://www.cnblogs.com/net-safe/p/8488605.html

五、|

介绍:|表示或运算,将数值转换为二进制数,并进行或运算
或运算规则:0&0=0;0&1=1;1&0=1;1&1=1,即或运算的两个数只要有一个值为1,那么结果就为1
例:10|24
计算过程:

10|24
(1)转二进制:1010&11000,即01010&11000
(2)或运算:
01010
11000
结果为:11010,转换为十进制为26
发布了148 篇原创文章 · 获赞 61 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_41617034/article/details/105251741