按位与、或等运算方法

下面总结一下各种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。

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

“与运算”的特殊用途

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

(2)取一个数中指定位

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

例:设X=10101110,

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

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

2 按位或运算符(|)

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

运算规则: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即可得到。

3  异或运算符(^)

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

运算规则: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。

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

4 取反运算符(~)

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

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

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

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

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

 5 左移运算符(<<)

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

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

左移1位后a = a * 2;

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

 6 右移运算符(>>)

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

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

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

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

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

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

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

var temp = -14 >> 2

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

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

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

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

 8 复合赋值运算符

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

&=    例: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。

时间: 2024-11-07 19:48:22

按位与、或等运算方法的相关文章

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表示 补码表示法:真值为正时,与原码相同,真值为负时,补码是原码的"求反加一" 反码表示法:真值为正时,与原码相同,真值为负时,补码是原码的"每位求反" 移码表示法:同一个真值的移码和不忙吗只差一个符号位 --表示小数点的存在:定点表示和浮点表示 --定点运算:移位运算.加法与减法运算

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

按位与运算符(&) 参加运算的两个数据,按二进制位进行“与”运算. 运算规则: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,只要与一个各

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

按位与运算符(&) 参加运算的两个数据,按二进制位进行“与”运算. 运算规则: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,只要与一个各

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

计算机中使用的数据可分为两大类: 符号数据:非数字 符号的表示(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

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

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

Linux Bash算数运算方法小结

A=1 B=2 方法1:let(中间无空格) let C=$A+$B 方法2:$[  ] C=$[$A+$B] 方法3:$(()) C=$(($A+$B)) 方法4:expr(中间有空格) C=`expr $A + $B`

shell的几种运算方法

a.expr正常的加法乘除运算    注:expr只能进行整数运算 expr 2 + 2 expr 2 - 2 expr 2 \* 2 expr 2 / 2 注意: 1.运算符及计算的数字左右都有至少一个空格 2.使用乘号,必须使用反斜线屏蔽其特定含义 b.expr引用变量 用法1 #i=1 #i=`expr $i + 1` 用法2 #a=2 #b=3 #expr $[a+b]  或者 #expr $[$a+$b] c.$(())的用法    注:效率最高的计算方法 #((a=1+2**3-4%