免费邀请码更改用户名CRC32解密2.0回帖奖励召回投票记录删除领夜猫子帮助中心 本站已运行
搜索
查看: 157|回复: 1
收起左侧

易语言置入代码获取1字节中有多少个比特位1或0 比数组查表法还快150%左右

[复制链接]
发表于 2018-9-24 18:10:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?加入我们

x

  1. .版本 2
  2. .支持库 spec

  3. .程序集 程序集1
  4. .程序集变量 二进制1的数量表, 字节型, , "256"
  5. .程序集变量 二进制0的数量表, 字节型, , "256"

  6. .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码


  7. _临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
  8. 返回 (0)  ' 可以根据您的需要返回任意数值

  9. .子程序 _临时子程序
  10. .局部变量 指针, 整数型
  11. .局部变量 值, 整数型
  12. .局部变量 结果, 整数型
  13. .局部变量 移位计数, 整数型
  14. .局部变量 计数, 整数型
  15. .局部变量 时间, 整数型

  16. ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。

  17. .变量循环首 (0, 255, 1, 值)
  18.     结果 = 0
  19.     .变量循环首 (0, 7, 1, 移位计数)

  20.         .如果真 (位与 (左移 (1, 移位计数), 值) ≠ 0)
  21.             结果 = 结果 + 1
  22.         .如果真结束

  23.     .变量循环尾 ()
  24.     二进制1的数量表 [值 + 1] = 结果
  25.     二进制0的数量表 [值 + 1] = 8 - 结果
  26. .变量循环尾 ()
  27. 时间 = 取启动时间 ()
  28. .变量循环首 (0, 255, 1, 计数)
  29.     .判断开始 (字节有几个0或1 (计数, 假) ≠ 字节有几个0_查表 (计数))
  30.         暂停 ()
  31.     .判断 (字节有几个0或1 (计数, 真) ≠ 字节有几个1_查表 (计数))
  32.         暂停 ()
  33.     .默认

  34.     .判断结束


  35. .变量循环尾 ()
  36. .计次循环首 (100000000, )
  37.     字节有几个0_查表 (123)
  38. .计次循环尾 ()
  39. 调试输出 (“数组查表耗时”, 取启动时间 () - 时间)

  40. 时间 = 取启动时间 ()

  41. .计次循环首 (100000000, )
  42.     字节有几个0或1 (123, 假)
  43. .计次循环尾 ()
  44. 调试输出 (“置入代码耗时”, 取启动时间 () - 时间)



  45. .子程序 字节有几个0或1, 字节型, 公开, 返回 0~8 比数组查表法快150%
  46. .参数 字节, 字节型, , 欲要进行操作的字节
  47. .参数 位, 逻辑型, , 真返回1的数量 假返回0的数量

  48. 置入代码 ({ 184, 0, 0, 0, 0, 138, 69, 8, 138, 77, 12, 128, 225, 1, 180, 0, 183, 0, 235, 15, 138, 216, 128, 227, 1, 56, 203, 117, 2, 254, 199, 208, 232, 254, 196, 128, 252, 8, 114, 236, 138, 199, 201, 194, 8, 0 })
  49. ' mov al,[ebp+8]
  50. ' mov cl,[ebp+12]
  51. ' and cl,1
  52. ' mov ah,0
  53. ' mov bh,0
  54. ' .while ah<8
  55. ' mov bl,al
  56. ' and bl,1
  57. ' .if bl == cl
  58. ' inc bh
  59. ' .endif
  60. ' shr al,1
  61. ' inc ah
  62. ' .endw
  63. ' mov al,bh
  64. ' leave
  65. ' retn 8

  66. 返回 (0)

  67. .子程序 字节有几个1_查表, 字节型
  68. .参数 字节, 字节型

  69. 返回 (二进制1的数量表 [字节 + 1])

  70. .子程序 字节有几个0_查表, 字节型
  71. .参数 字节, 字节型

  72. 返回 (二进制0的数量表 [字节 + 1])

复制代码

相关帖子

回复

使用道具 举报

腾讯云国际顶级CA机构SSL证书8.8折,云解析买一年最高送半年。
发表于 2018-9-24 21:43:08 | 显示全部楼层
查表每次都要去检查访问的地址是否越界或小于1,所以就慢。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

小黑屋|手机版|Archiver|官方QQ群|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备 15010402000325号 腾讯云安全认证

GMT+8, 2019-8-25 14:36, 34.236.190.216 , Processed in 0.141601 second(s), 30 queries .

Powered by Discuz! X3.4 © 2001-2017 Comsenz Inc.

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