备战蓝桥杯数学基础:位运算理论

@[TOC](目录)

位运算概述

位运算就是基于整数的二进制表示进行的运算,由于计算机内部就是以二进制来村塾数据,位运算是相当快的。基本的位运算共6种,分别为按位与、按位或、按位异或、按位取反、左移和右移

与、或、异或

这三者都是两数间的运算,因此这里就放在一起了

注意:1 :这里要区分逻辑与和 按位与逻辑或 和按位或的区别。

2:异或运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变 例如a^b^b = a

相关例子:

5 = 101(二进制) 6 = (110)

5&6 = 100 (二进制)= 4

5|6 = 111(二进制) = 7

5^6 = 011(二进制) = 3

取反

取反是对一个数n进行的位运算,即单目运算

取反暂无默认的数学符号表示,其对应的运算符为 ~。它的作用是把 的二进制补码中的 和 全部取反( 变为 , 变为 )。有符号整数的符号位在 ~ 运算中同样会取反。

注意:补码:在二进制表示下,整数和0的补码为其本身,负数的补码是将其对应正数按位取反后加一

例子:

5=(000000101)二进制

-5=(11111010)二进制

-5的补码=(11111011)二进制

~(-5)=(00000100)二进制 = 4

左移和右移

n<< i 表示将n的二进制向左移动i位所得的值

n>>i 表示将n的二进制向右移动i位所得的值

11= (00001011)二进制

11 << 3 = (01011000)二进制 = 88

11 >> 2 =(00000010)二进制 = 2

注意:移位运算中如果有操作数为负值或右操作数大于等于左操作的位数,这些行为都是未定义的

例如:a<< -1 ,a>>32

位运算优先级

猜你喜欢

转载自blog.csdn.net/weixin_54046648/article/details/128619950