C# 位运算详解
运算符 | 描述 |
---|---|
&(位与) | 当两个二进制操作位都为1时,结果就为1 |
|(位或) | 当两个二进制操作位有1个为1时,结果就为1 |
^(位异或) | 当两个二进制操作位只有1个为1时,结果为1 |
~(位非) | 操作位的每个位都取反(就是0变成1,1变成0) |
<<(左移) | 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。 |
>>(右移) | 二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 |
pq实例图
p | q | p & q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
如下 :
int x=12,y=10;
int a;
a=x&y; //a=8
下面是计算试子的和加减法一样
二进制的个位,十位,百位,千位,分别对应的是1,2,4,8 二进制每多一位只需要乘2 那个个位置有1 就加上该位置的十进制数 。
上面说&运算时,当两个二进制操作位都为1时,结果就为1
看个位 0&0 =0 十位 0&1=0 百位 1&0=0 千位1&1=1
换下来就是 1000(二进制) =8(十进制) 12&10=8
12|10,12^10 可以试着就算这个值
位非怎么运算呢?
~12 直接位数取反 0变1,1变0 二进制左端1是位负数 在取反上-1
~12=-13;
要获取他12的相反数 二进制表示 也是 取反 但是在结果上加1
左/右移 左移对移玩的位置补0 14<<3 二进制就是 1110>>1110 000
就是 14X2X2X2=112 14<<3=112
右移 切记负数右移是错误的 因为一个负数无论如何除2都不会乘位一个正数 14>>3=1
从此山高路远,纵马扬鞭。愿往后旅途,三冬暖,春不寒,天黑有灯,下雨有伞。此生尽兴,不负勇往。