找回密码
 加入
搜索
查看: 3619|回复: 3

[效率算法] [已解决]bitand用数学表达式怎么写呢?

[复制链接]
发表于 2014-5-4 12:37:51 | 显示全部楼层 |阅读模式
本帖最后由 李岸 于 2014-5-26 14:29 编辑

我在把AU3dllcall中的源码,翻译成别的语言.
从中收获的不少,可是也难免出现问题,比如说,bitand要用数学表达式要怎么写呢?因为那个语言根本没位运算函数..

比如:

bitor 两数取大就可以了.;num1<num2=num2 反之亦然.

bitnot 数值 减去 数值*2,再减1就 可以了;num-num*2-1

那bitand呢,那就看不懂了,求解?

在问的直接一点,就是AU3dllcall里面有一些常量,在使用bitor,bitand,bitnot得出数值.

有什么不用这些函数就能解决的方法吗?
发表于 2014-5-4 12:46:31 | 显示全部楼层
代码翻译这件事情真的很有意思的.因为你要精通阅读理解含义以后才可以做.现在才发现真的是收益良多,平添两种语言无数记忆索引.
发表于 2014-5-4 12:50:50 | 显示全部楼层
这个问题我也尝试去做比较笨的方法,就是一位一位的去进行逻辑运算,然后返回出来结果.
但后来发现什么传进去什么进制,返回出来要什么进制的数,太麻烦了.
得出这么一个规律.但我着实看不懂bitand到底有什么规律可循?
又或者这个规律存在什么漏斗吗?还请大家指点一二.谢谢,虚心求教.
发表于 2014-5-4 13:08:12 | 显示全部楼层
Local $x = BitAND(13, 7) ;x == 5 ,因为 1101 AND 0111 = 0101

十进制“13”=二进制“1101”,十进制“7”=二进制“0111”

按位"与"运算

就是从右到左,第一个数的第一位与第二个数的第一位、第一个数的第二位与第二个数的第二位......,"与"可以理解为“乘法”,1×1=1、1×0=0、0×0=0,

从右到左,第一个数的第一位与第二个数的第一位是 “1×1=1”依次 “0×1=0、 1×1=1、 1×0=0”,结果为 0101  即x = 5

十进制与二进制对比

01 = 0001
02 = 0010
03 = 0011
04 = 0100
05 = 0101
06 = 0110
07 = 0111
08 = 1000
09 = 1001
10 = 1010
11 = 1011
12 = 1100
13 = 1101
14 = 1110
15 = 1111
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 06:50 , Processed in 0.074461 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表