Opencv中的问题

skevil 2013-08-24 06:07:46
int ux = ((dx > 0) << 1) - 1;//x的增量方向,取或-1    
这句什么意思?
 if ((eps << 1) >= dx) 
这句是什么情况下为真呢?
...全文
98 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
skevil 2013-08-24
  • 打赏
  • 举报
回复
引用 1 楼 relaxisland 的回复:
主要是为了速度, 用位运算来代替 乘除计算,找本c的书,看看位运算吧 比如4,二进制 是 100 往左一位就是 1000, 变成乘以2 等于8 了 往右一位就是 10. 变成除以2,等于4 了 int ux = ((dx > 0) << 1) - 1;//x的增量方向,取或-1 ==> dx就是你所说x的增量吧 所以当dx>0的时候,dx>0是true 也是1, <<1 二进制往右移1位,也就是乘以2, 所以ux = 1 而dx<0的时候, ux = -1 (dx>0 是false 也是0) if ((eps << 1) >= dx) ==》就是判定 eps*2 》=dx
还有点疑惑要请教下你,默认int ux的初始值应该是0吧,那么0往左移一位的话,ux不应该还是0吗?为什么是1了?
skevil 2013-08-24
  • 打赏
  • 举报
回复
引用 1 楼 relaxisland 的回复:
主要是为了速度, 用位运算来代替 乘除计算,找本c的书,看看位运算吧 比如4,二进制 是 100 往左一位就是 1000, 变成乘以2 等于8 了 往右一位就是 10. 变成除以2,等于4 了 int ux = ((dx > 0) << 1) - 1;//x的增量方向,取或-1 ==> dx就是你所说x的增量吧 所以当dx>0的时候,dx>0是true 也是1, <<1 二进制往右移1位,也就是乘以2, 所以ux = 1 而dx<0的时候, ux = -1 (dx>0 是false 也是0) if ((eps << 1) >= dx) ==》就是判定 eps*2 》=dx
非常感谢!
relaxisland 2013-08-24
  • 打赏
  • 举报
回复
主要是为了速度, 用位运算来代替 乘除计算,找本c的书,看看位运算吧 比如4,二进制 是 100 往左一位就是 1000, 变成乘以2 等于8 了 往右一位就是 10. 变成除以2,等于4 了 int ux = ((dx > 0) << 1) - 1;//x的增量方向,取或-1 ==> dx就是你所说x的增量吧 所以当dx>0的时候,dx>0是true 也是1, <<1 二进制往右移1位,也就是乘以2, 所以ux = 1 而dx<0的时候, ux = -1 (dx>0 是false 也是0) if ((eps << 1) >= dx) ==》就是判定 eps*2 》=dx

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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