php位运算 与 或 异或 取反

<?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 13&7;

echo "<br/>";
echo 5|4 ;

echo "<br/>";
echo -3^3;

//推理过程:

/**

13&7

13的补码  00000000 00000000 00000000 00001101
7的补码   00000000 00000000 00000000 00000111
13&7      00000000 00000000 00000000 00000101   = 5

5|4

5的补码 00000000 00000000 00000000 00000101
4的补码 00000000 00000000 00000000 00000100
5|4      00000000 00000000 00000000 000000101   =5

-3^3

-3的补码
-3的原码 10000000 00000000 00000000 00000011
-3的反码 11111111 11111111 11111111 11111100
-3的补码 11111111 11111111 11111111 11111101
php位运算 与 或 异或 取反
复制代码
<?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 13&7;

echo "<br/>";
echo 5|4 ;

echo "<br/>";
echo -3^3;

//推理过程:

/**

13&7

13的补码  00000000 00000000 00000000 00001101
7的补码   00000000 00000000 00000000 00000111
13&7      00000000 00000000 00000000 00000101   = 5

5|4

5的补码 00000000 00000000 00000000 00000101
4的补码 00000000 00000000 00000000 00000100
5|4      00000000 00000000 00000000 000000101   =5

-3^3

-3的补码
-3的原码 10000000 00000000 00000000 00000011
-3的反码 11111111 11111111 11111111 11111100
-3的补码 11111111 11111111 11111111 11111101

3的补码 00000000 00000000 00000000 00000011

-3^3     11111111 11111111 11111111 11111110  《补码》
 推反码《对补码-1》
  11111111 11111111 11111111 11111101   《反码》
推原码《符号位不变 其他取反》
  10000000 00000000 00000000 00000010   《原码》  =-2

注意:因为二进制没有进位和退位,可以看做是10-1,那就等于1了

**/
?>


3的补码 00000000 00000000 00000000 00000011

-3^3     11111111 11111111 11111111 11111110  《补码》
 推反码《对补码-1》
  11111111 11111111 11111111 11111101   《反码》
推原码《符号位不变 其他取反》
  10000000 00000000 00000000 00000010   《原码》  =-2

注意:因为二进制没有进位和退位,可以看做是10-1,那就等于1了

**/
?>
时间: 2024-10-12 23:23:48

php位运算 与 或 异或 取反的相关文章

PHP中关于位运算符 与 或 异或 取反

<?php /** * author:LMS * createTime:2015/07/22 * desctiption:位运算[ & | ^ ~ ] * 与&:如果a.b两个值不相同,则与结果为0.如果a.b两个值相同,与结果为1 * 或|:与逻辑中的或一致[只有两个值都为假时才为假,其余都为真] * 异或[xor]如果a.b两个值不相同,则异或结果为1.如果a.b两个值相同,异或结果为0 * 取反[~]:对每一位取反 * [注意!非 ==>是逻辑运算符,返回是个布尔值 */

二进制和位运算中的异或

1.给出一个问题:给你一个整形数组,这个数组中除了一个数字仅仅出现一次外,其它数字都仅仅出现两次,求出那个仅仅出现一次的数字? 要求:时间复杂度为O(n) , 空间复杂度为O(1). 这个题目的难点在于空间复杂度的限制. 解法:一个数出现两个,两个数同样.而相等两个数异或的值为0 . 所以.我们仅仅须要把整个数组的数都异或一遍,我们就能得到仅仅出现了一次的那个数字 <span style="font-size:18px;">int get_one_num(int num[]

位运算中的异或运算

参与运算的两个值,如果两个相应的bit位相同,则结果为0,否则为1 char a1 = '十', a2 = '点', a3 = '进', a4 = '攻';            char secret = '8';            a1 = (char)(a1 ^ secret);            a2 = (char)(a2 ^ secret);            a3 = (char)(a3 ^ secret);            a4 = (char)(a4 ^ se

5/30 c语言中的位运算

1.什么是位运算? 位运算是指按二进制位进行的运算.因为在系统软件中,常要处理二进制的问题.储存单元中的各二进制位左移或者右移一位,两个数按位相加等.c语言灵活,接近底层,对程序员的要求高,不像其他语言对c语言进行了封装,出错性会高很多. 2.位运算符和位运算. 运算符&按位与  ~取反 |按位或    <<左移  ^按位或   >>右移.位运算中除了~以外,均为二元元运算符,即要求两侧各有一个运算量. 3.与&的应用. 清零,无论任何一个二进制的书与上一个0000

为什么Java的hash表的长度一直是2的指数次幂?为什么这个(hash&amp;(h-1)=hash%h)位运算公式等价于取余运算?

1.什么是hash表? 答:简单回答散列表,运算在hash结构散列(分散)存放. 2.如何散列排布,如果均匀排布? 答:取余运算 3.Java中如何实现? 答:hash&(h-1) 4.为什么hash&(h-1)=等价于hash%h java的h(表长)一定是2的指数次幂,2的指数次幂2n 2n的结果:一定长这样10000...(n个0) 2n-1的结果:一定这样1111(n-1)个1 举个例子: 当h=16,对应的二进制:00010000 h-1=15,对应的二进制:00001111 可

位运算基本概念及简单运用

C语言提供了六种位运算符: &     按位与    |      按位或    ^      按位异或    ~      取反    <<    左移,相当与*2    >>    右移,正数高位补0,负数由计算机决定 循环左移k次 (x<<k) | (x >> (32-k)), 循环右移k次 (x>>k) | (x << (32-k)) 当然常常应为优先级问题而犯错~~~ 优先级及口诀如下 优先级别 运算符 记忆口诀 1

基本数据类型-位运算-字符集-流

基本数据类型-位运算-字符集-流 1.基本类型 类型 字节数 范围 byte 1 -128 ~ 127 short 2 -32768 ~32767 int 4 \(- 2^{31}\) ~ $ 2^{31} - 1$ long 8 float 4 double 8 boolean 1 char 2 注意:short.char.byte参与运算时直接抬升到int型. 思考题: 0是整数还是负数? 字节数-128在内存中的存储形态是如何的? 字节范围为何是从-128到127之间,而不是-127到正的

Java千问:Java位运算经典应用(一)

很多人认为位运算在实际开发过程中并没什么用,学习位运算也只是为了应付面试.这种想法是错误的,接下来我们就通过几篇连载文章介绍一下位运算在实际开发过程中的几个经典应用实例.如果对位运算规则掌握还不是很熟练,可以先阅读<Java千问:Java语言位运算符详解>.这篇文章不仅详细讲解了Java位运算的基本规则和一些常用的运算定律,同时还在文中提到了一些常用的位运算实际应用,比如可以用位运算操作的方式快速把某个变量所在的内存单元清零,或者位运算的方式实现某个变量快速倍增等等.但文中所这提到的这几个实际

C语言位运算遇到的坑

在Data Lab中有一个logicalShift函数给定一个值x和需要移动的位数n,要求只是用运算符:~ & ^ | + << >>,实现逻辑右移运算.思考了很久,然后我写出了如下的代码: /* * logicalShift - shift x to the right by n, using a logical shift * Can assume that 0 <= n <= 31 * Examples: logicalShift(0x87654321,4