编程基础知识
Ehoac Lv3

位运算

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

与运算(&)

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

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

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

    1
    2
    X=10101110
    取X的低4位,用 X & 0000 1111 = 00001110 即可得到

注:负数按补码形式参加按位与运算。

或运算(|)

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

  • 用来对一个数据的某些位置 1(找到一个数,对应 X 要置 1 的位,该数的对应位为 1,其余位为零。此数与 X 相或可使 X 中的某些位置 1)

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

异或运算(^)

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

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

    1
    X=10101110,使X低4位翻转,用X ^0000 1111 = 1010 0001即可得到
  • 与 0 相异或,保留原值 ,X ^ 00000000 = 1010 1110

取反运算(~)

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

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

左移运算(<<)

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

1
2
a = a<<2将a的二进制位左移2位,右补0
左移1位后a = a*2

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

右移运算(>>)

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

1
a = a>>2 将a的二进制位右移2位

注:操作数每右移一位,相当于该数除以 2 X/2,左补 0 或 补 1 得看被移数是正还是负。

 评论