按位与、或、异或等运算方法(转)

按位与运算符(&)

参加运算的两个数据,按二进制位进行“与”运算。

运算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1;

即:两位同时为“1”,结果才为“1”,否则为0

例如:3&5  即 0000 0011 & 0000 0101 = 0000 0001   因此,3&5的值得1。

另,负数按补码形式参加按位与运算。

“与运算”的特殊用途:

(1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。

(2)取一个数中指定位

方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。

例:设X=10101110,

取X的低4位,用 X & 0000 1111 = 0000 1110 即可得到;

还可用来取X的2、4、6位。

按位或运算符(|)

参加运算的两个对象,按二进制位进行“或”运算。

运算规则:0|0=0;   0|1=1;   1|0=1;    1|1=1;

即 :参加运算的两个对象只要有一个为1,其值为1。

例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111   因此,3|5的值得7。 

另,负数按补码形式参加按位或运算。

“或运算”特殊作用:

(1)常用来对一个数据的某些位置1。

方法:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零。此数与X相或可使X中的某些位置1。

例:将X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。

异或运算符(^)

参加运算的两个数据,按二进制位进行“异或”运算。

运算规则:0^0=0;   0^1=1;   1^0=1;   1^1=0;

即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。

“异或运算”的特殊作用:

(1)使特定位翻转 找一个数,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可。

例:X=10101110,使X低4位翻转,用X ^ 0000 1111 = 1010 0001即可得到。

(2)与0相异或,保留原值 ,X ^ 0000 0000 = 1010 1110。

从上面的例题可以清楚的看到这一点。

取反运算符(~)

参加运算的一个数据,按二进制位进行“取反”运算。

运算规则:~1=0;   ~0=1;

即:对一个二进制数按位取反,即将0变1,1变0。

使一个数的最低位为零,可以表示为:a&~1。

~1的值为1111111111111110,再按“与”运算,最低位一定为0。因为“~”运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符都高。

左移运算符(<<)

将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。

例:a = a << 2 将a的二进制位左移2位,右补0,

左移1位后a = a * 2;

若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。

右移运算符(>>)

将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。

操作数每右移一位,相当于该数除以2。

例如:a = a >> 2 将a的二进制位右移2位,

左补0 or 补1 得看被移数是正还是负。

>> 运算符把 expression1 的所有位向右移 expression2 指定的位数。expression1 的符号位被用来填充右移后左边空出来的位。向右移出的位被丢弃。

例如,下面的代码被求值后,temp 的值是 -4:

-14 (即二进制的 11110010)右移两位等于 -4 (即二进制的 11111100)。

var temp = -14 >> 2

无符号右移运算符(>>>)

>>> 运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃。

例如:var temp = -14 >>> 2

变量 temp 的值 -14 (即二进制的 11111111 11111111 11111111 11110010),向右移两位后等于 1073741820 (即二进制的 00111111 11111111 11111111 11111100)。

复合赋值运算符

位运算符与赋值运算符结合,组成新的复合赋值运算符,它们是:

&=    例:a &= b        相当于a=a & b

|=    例:a |= b        相当于a=a | b

>>=   例:a >>= b       相当于a=a >> b

<<= 例:a <<= b       相当于a=a << b

^=   例:a ^= b       相当于a=a ^ b

运算规则:和前面讲的复合赋值运算符的运算规则相似。

不同长度的数据进行位运算

如果两个不同长度的数据进行位运算时,系统会将二者按右端对齐,然后进行位运算

以“与”运算为例说明如下:我们知道在C语言中long型占4个字节,int型占2个字节,如果一个long型数据与一个int型数据进行“与”运算,右端对齐后,左边不足的位依下面三种情况补足,

(1)如果整型数据为正数,左边补16个0。

(2)如果整型数据为负数,左边补16个1。

(3)如果整形数据为无符号数,左边也补16个0。

如:long a=123;int b=1;计算a & b。

如:long a=123;int b=-1;计算a & b。

如:long a=123;unsigned int b=1;计算a & b。

转自:http://blog.sina.com.cn/s/blog_618199e60100ka5b.html

时间: 2024-11-08 22:09:09

按位与、或、异或等运算方法(转)的相关文章

按位与、或、异或等运算方法

按位与运算符(&) 参加运算的两个数据,按二进制位进行“与”运算. 运算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1; 即:两位同时为“1”,结果才为“1”,否则为0 例如:3&5  即 0000 0011 & 0000 0101 = 0000 0001   因此,3&5的值得1. 另,负数按补码形式参加按位与运算. “与运算”的特殊用途: (1)清零.如果想将一个单元清零,即使其全部二进制位为0,只要与一个各

按位与、或等运算方法

下面总结一下各种c++中出现的各种位运算的方法! 1 按位与运算符(&) 参加运算的两个数据,按二进制位进行"与"运算. 运算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1; 即:两位同时为"1",结果才为"1",否则为0 例如:3&5  即 0000 0011 & 0000 0101 = 0000 0001   因此,3&5的值得1. 另,负数按补码形

Python数值基本运算和其它数学运算方法

数值基本运算 支持最基本的数学运算符号:*+ - / % **.取正负+x -x,地板除法//,除法和取模divmod(x, y)**: >>> 123 + 345 468 >>> 345 - 123 222 >>> 1.5 * 4 6.0 >>> 2/5 0.4 >>> 2 % 3 2 >>> 3 ** 2 9 >>> 3.00 ** 2 9.0 >>> 3 *

计算机组成原理基础知识-运算方法

五.计算机的运算方法 --在计算机中参与运算的数有两大类:无符号数和有符号数 无符号数:没有符号的数 有符号数 机器数与真值:机器中:0表示正,1表示负 原码表示法:把真值的正负用01表示 补码表示法:真值为正时,与原码相同,真值为负时,补码是原码的"求反加一" 反码表示法:真值为正时,与原码相同,真值为负时,补码是原码的"每位求反" 移码表示法:同一个真值的移码和不忙吗只差一个符号位 --表示小数点的存在:定点表示和浮点表示 --定点运算:移位运算.加法与减法运算

python 的按位与 或 异或 运算

符号 描述 运算规则                        by MoreWindows & 与 两个位都为1时,结果才为1     (统计奇数) | 或 两个位都为0时,结果才为0       (统计偶数) ^ 异或 两个位相同为0,相异为1      (常用统计不相同数) ~ 取反 0变1,1变0 << 左移 各二进位全部左移若干位,高位丢弃,低位补0 >> 右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术

计算机组成原理(科学出版社) 第二章:运算方法和运算器

复习 20190630 一. 原码.补码.反码.移码 真值(十进制数) 转换为真值(二进制数)最好补全为八位,对应的原码就是将最高位写成符号位(还是八位) 具体思维导图如下: 原码求补码的简便方法:除符号位之外,从最低位开始,遇第一个1之前的各位保持不变,其余各位按位取反 进制之间的转换,思维导图如下: 二.补码加减法 补码加法公式:[X]补 + [Y]补 = [X+Y]补    (mod  2n+1) 定理:任意两数补码之和等于该两数之和的补码 2.  补码的乘法和除法就是将[X]的补码向左或

《计算机组成原理》-读书笔记(二)运算方法和运算器

计算机中使用的数据可分为两大类: 符号数据:非数字 符号的表示(ASCII.汉字.图形等) 数值数据:数字数据的表示方法(定点.浮点)   计算机常用的数据表示格式有两种: 定点表示:小数点位置固定(可表示带符号或不带符号的纯小数.纯整数) 浮点表示:小数点位置不固定(IEEE754)   十进制数串的表示: 字符串形式 BCD(压缩) 编码方式     有权码:8421码.2421码.5211码     无权码:余三码.格雷码 自定义数据表示   数值的机器码表示:原码.反码.补码.移码  

【重学计算机】计组D3章:运算方法与运算器

1. 定点数运算及溢出 定点数加减法:减法化加法,用补码直接相加,忽略进位 溢出:运算结果超出了某种数据类型的表示范围 溢出检测方法:统一思想概括为正正得负或负负得正则溢出,正负或负正不可能溢出 方法1:V = XYS + XYS(XY为两个加数的符号位,S为结果的符号位,_表示非),那么V = 1则为溢出 方法2:V = C0 ⊕ C1(C0是最高数据位产生的进位,C1是符号位产生的进位),那么V = 1则为溢出 方法3:V = Xf1 ⊕ Xf2(数据采用变型补码 Xf1Xf2 X0X1X2

C. Meaningless Operations Codeforces Global Round 1 异或与运算,思维题

C. Meaningless Operations time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Can the greatest common divisor and bitwise operations have anything in common? It is time to answer this question.