位运算一点也看不懂
什么是位运算呀,就拿 按位与 做例子给我讲一下吧
在网上查了好多资料,都弄不明白。比如下面这个。也是看不懂呀?!
按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。
按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。 main(){ int a=9,b=5,c; c=a&b; printf("a=%d\nb=%d\nc=%d\n",a,b,c); }
看不懂,哪位大侠给个讲解呀,上例是个什么原理
解决方法
考虑一般逻辑运算,假定1为真 0为假 &为与 |为或
则显然的 有
0&0=0 1&0=0 0&1=0 1&1=1
0|0=0 1|0=1 0|1=1 1|1=1
类似的 !为非 ^为疑惑
则对于任何两个二进制数,将其最低位对齐,最高位不足的补0,然后位对位的进行逻辑运算,得到的结果仍然是一个二进制数,即为位运算
显然 位运算与加法是不同的。例中为了区别位运算和加法而分别列式进行了说明。
例子中已经讲得很明白了。看下面
00001001=》9
&&&&&&&&
00000101=》5
============
00000001
也就是说相同位号的位同时是一时,结果就是一。否则结果就是0。
那一个说9&5可以写成9 5?9 5表示9|5。
数学的加( )运算与计算机的与(&)运算表面好象一样,其实不然!
按位与计算的时候,记住是:1与1得1(不进位),0与1得0,0与0也得0。
加法运算是:1与1得0(要进位),0与1得1(不进位),0与0得0。