甜品网站策划与建设,湛江做网站优化,公司在线网站制作系统,网易企业邮箱登录入口手机位运算小结
位运算不管是在C语言中#xff0c;或者其他语言#xff0c;都是经常会用到的#xff0c;所以本文也就不固定以某种语言来举例子了#xff0c;原始点就从0、1开始。位运算主要包括按位与()、按位或(|)、按位异或(^)、取反(~)、左移()、右移(或者其他语言都是经常会用到的所以本文也就不固定以某种语言来举例子了原始点就从0、1开始。位运算主要包括按位与()、按位或(|)、按位异或(^)、取反(~)、左移()、右移()这几种其中除了取反(~)以外其他的都是二目运算符即要求运算符左右两侧均有一个运算量。
补码
在总结按位运算前有必要先介绍下补码的知识我们知道当将一个十进制正整数转换为二进制数的时候只需要通过除2取余的方法即可但是怎么将一个十进制的负整数转换为二进制数呢其实负数是以补码的形式表示其转换方式简单的一句话就是先按正数转换然后取反加1。
要将十进制的-10用二进制表示先将10用二进制表示
0000 0000 0000 1010
取反
1111 1111 1111 0101
加1
1111 1111 1111 0110
所以-10的二进制表示就是
1111 1111 1111 0110按位与()
参加运算的两个数换算为二进制(0、1)后进行与运算。只有当相应位上的数都是1时该位才取1否则该为为0。
将10与-10进行按位与()运算
0000 0000 0000 1010
1111 1111 1111 0110
-----------------------
0000 0000 0000 0010
所以
10 -10 0000 0000 0000 0010按位或(|)
参加运算的两个数换算为二进制(0、1)后进行或运算。只要相应位上存在1那么该位就取1均不为1即为0。
将10与-10进行按位或(|)运算
0000 0000 0000 1010
1111 1111 1111 0110
-----------------------
1111 1111 1111 1110
所以
10 | -10 1111 1111 1111 1110按位异或(^)
参加运算的两个数换算为二进制(0、1)后进行异或运算。只有当相应位上的数字不相同时该为才取1若相同即为0。
将10与-10进行按位异或(^)运算
0000 0000 0000 1010
1111 1111 1111 0110
-----------------------
1111 1111 1111 1100
所以
10 ^ -10 1111 1111 1111 1100 可以看出任何数与0异或结果都是其本身。利用异或还可以实现一个很好的交换算法用于交换两个数算法如下
a a ^ b;
b b ^ a;
a a ^ b;取反(~)
参加运算的两个数换算为二进制(0、1)后进行取反运算。每个位上都取相反值1变成00变成1。
对10进行取反(~)运算
0000 0000 0000 1010
---------------------
1111 1111 1111 0101
所以
~10 1111 1111 1111 0101左移()
参加运算的两个数换算为二进制(0、1)后进行左移运算用来将一个数各二进制位全部向左移动若干位。
对10左移2位(就相当于在右边加2个0)
0000 0000 0000 1010
--------------------
0000 0000 0010 1000
所以
10 2 0000 0000 0010 1000 40注意观察可以发现左移一位的结果就是原值乘2左移两位的结果就是原值乘4。
右移()
参加运算的两个数换算为二进制(0、1)后进行右移运算用来将一个数各二进制位全部向右移动若干位。
对10右移2位(就相当于在左边加2个0)
0000 0000 0000 1010
--------------------
0000 0000 0000 0010
所以
10 2 0000 0000 0000 0010 2 注意观察可以发现右移一位的结果就是原值除2左移两位的结果就是原值除4注意哦除了以后没有小数位的都是取整。