为啥要用位运算 取某一位代替取模

求模和求余
一直以为求模和求余是一回事,发现这两者是不同的。以下为网上转载的资料:
通常情况下取模运算(mod)和求余(rem)运算被混为一谈,因为在大多数的编程语言里,都用'%'符号表示取模或者求余运算。在这里要提醒大家要十分注意当前环境下'%'运算符的具体意义,因为在有负数存在的情况下,两者的结果是不一样的。
对于整型数a,b来说,取模运算或者求余运算的方法都是:
1.求 整数商: c = a/b;
2.计算模或者数: r = a - c*b.
求模运算和求余运算在第一步不同: 取模运算在取c的值时,向0 方向舍入(fix()函数);
而求余运算在计算c的值时,向无穷小方向舍入(floor()函数)。
因此,当a和b符号一致时,求模运算和求余运算所得的c的值一致,因此结果一致。但是当符号不一致的时候,结果不一样。求模运算结果的符号和b一致,求余运算结果的符号和a一致。
在C语言中,%符号表示的是求余运算,在python脚本中,%表示的是取模。(通常取模运算中b不允许是负数,但是在python
2.5.1里可以在%后面跟负数,因为python语言中除法的结果是向0舍入,因此计算结果是取模!)
下面表格是一些典型的取模或者求余的值。
C语言:a%b
Python Shell:
a%b(取模)
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。巧妙的位运算及模运算
输入2的n次方:
如果突然要你输入2的19次方,你是不是还要想一下呢?敲个524288多累啊。用位运算:1
&& 19又快又准。
乘除2的倍数:
千万不要用乘除法,非常拖效率。只要知道左移1位就是乘以2,右移1位就是除以2就行了。
比如要算25 * 4,用25 && 2就好啦。
判断偶数:a %
2取模是最常用的判断方法之一。这样要用到除法运算,不好。实际上,还是用位运算解决:a & 1。效果和a
% 2是一样的,但是要快得多。
对2的倍数取模:
类似上面的方法。对2的倍数取模,只要将数与2的倍数-1做与运算就可以了。如:
a % 8 = a & 8-1
节省乘除法可以提高效率。
判断一个整数是否是处于 0-65535 之间(常用的越界判断):用一般的 (a
&= 0) && (a
&= 65535) 可能要两次判断。
改用位运算只要一次:
a & ~((1 &&
后面的常数是编译时就算好了的。其实只要算一次逻辑与就行了。
比如一个截取低6位的掩码:0x3F
用位运算这么表示:(1 && 6) - 1
这样也非常好读取掩码,因为掩码的位数直接体现在表达式里。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 位运算 取反 的文章

 

随机推荐