简单的位运算,指点下。。。。

mugua 2011-09-09 02:13:36

/*我刚看了一个例题,a*8 , 可以写成 a << 3 , 假设a = 2;也就是用2的二进制10左移3位得到二进制10000,换成十进制就是16这样写是没问题的,如果a*7呢? 我自己是这样理解的,2*7相当于2 << (2^3 + 2^0), 也就是(2<<3) + (2<<0),得出的答案却是18??? 不是14??*/

//如题
int a = 2;
int b = a*7;//就是只一句可以用位运算吗? 如果可以,能不能帮我写一个计算过程呢?
...全文
150 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
mugua 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 beiyangxiao 的回复:]
这是最快的算法:(a<<3)-a
只有一次位运算和一次减法运算。
[/Quote]的确这个想必要+两次的,算快的了,不过只适合这个题目
谢谢你们~~ 结贴咯
折叠-smile 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 sbjmhs 的回复:]
C/C++ code

/*我刚看了一个例题,a*8 , 可以写成 a << 3 , 假设a = 2;也就是用2的二进制10左移3位得到二进制10000,换成十进制就是16这样写是没问题的,如果a*7呢? 我自己是这样理解的,2*7相当于2 << (2^3 + 2^0), 也就是(2<<3) + (2<<0),得出的答案却是18??? 不是14??*/

//如题
int a = 2;
int……
[/Quote]
1 不会改变a的数值,只是在用a的值做运算……
2 如题,只是一种特殊情况而已,只能是2的倍数;
比如,十进制中,7*100=7*10^2,可以理解为2左移两位;得700
但是,7*80就不好换算了(⊙o⊙)哦
beiyangxiao 2011-09-09
  • 打赏
  • 举报
回复
这是最快的算法:(a<<3)-a
只有一次位运算和一次减法运算。
hokuhouhi 2011-09-09
  • 打赏
  • 举报
回复
http://graphics.stanford.edu/~seander/bithacks.html
简单位运算
mugua 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hokuhouhi 的回复:]
必须是2的幂次才可以的
a*7
等价:
a*4+a*2+a
a<<2 a<<1 a
[/Quote]谢谢你的分析,现在我明白了。
mugua 2011-09-09
  • 打赏
  • 举报
回复
我纯粹是想学习下如何使用位运算来代替 + - * / 运算。
在做像素处理的时候,据说用位运算代替这些运算符会很大的增加运算效率.
谁能举个例子吗,用位运算分别实现 + - * /
独自听枫 2011-09-09
  • 打赏
  • 举报
回复
位运算都是跟二在打交道,跟二没关系的,真心别想了
never517 2011-09-09
  • 打赏
  • 举报
回复
本来位运算是基本运算,所有的运算都可以转换成位运算,但是这个过程太复杂,只能由cpu处理,我也一直想知道位运算如何实现+法,有哪位大牛可以解答下么
Jokul_Lee 2011-09-09
  • 打赏
  • 举报
回复
应该是不能。
int b = (a<<2) + (a<<1) + a;

这样倒是行,但是用加。
不知道你是为什么想这么做呢.
CabinLS 2011-09-09
  • 打赏
  • 举报
回复
LS弄错了~~~ 是计算,不是改变a的值....
hokuhouhi 2011-09-09
  • 打赏
  • 举报
回复
必须是2的幂次才可以的
a*7
等价:
a*4+a*2+a
a<<2 a<<1 a
CabinLS 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 k_theking 的回复:]
问题表述不太清楚啊!你位运算,a<<2并不改变a的值吧!
[/Quote]a << 2为什么不改变a的值? 十进制2转换成二进制10再左移两位得到二进制1000,不是十进制8吗?
K_THEKING 2011-09-09
  • 打赏
  • 举报
回复
问题表述不太清楚啊!你位运算,a<<2并不改变a的值吧!
turing-complete 2011-09-09
  • 打赏
  • 举报
回复
乘数是2的整数次幂的时候可以用移位运算代替
qq120848369 2011-09-09
  • 打赏
  • 举报
回复
位运算技巧都是用来做2^n的,其他的真心别想了。
turing-complete 2011-09-09
  • 打赏
  • 举报
回复
乘数 是2的整数幂的时候可以移位,Lz这个例子太牵强,用不着
ouyh12345 2011-09-09
  • 打赏
  • 举报
回复
不能吧
位移操作其实是乘或除2的某次方

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧