找回密码
 加入
搜索
查看: 7609|回复: 19

[网络通信] 如何从加总值 拆解出 是 A+C+D 还是A+B 或者是 A+C , 那么A,B C是怎样的关系[已解決]

[复制链接]
发表于 2020-9-12 10:35:05 | 显示全部楼层 |阅读模式
本帖最后由 kk_lee69 于 2020-9-12 13:17 编辑

一直有个疑问 FileMove这个函数来说好了 里面参数标志为

[可选参数] 确定是否覆盖已存在的档:
可以是以下值的组合:
0 = (默认) 不覆盖已存在的文件
1 = 覆盖已存在的文件
8 = 自动创建不存在的目标目录结构 (见备注).


所以 9 等于 1+8  


我一直好奇 为什么用1 8,同样的疑问 包括了 风格有很多的值,但是我们总能够知道  某一个值 就是  A+C+D 的结果,而不是 A+B 的结果


我的疑惑就是:

【如果 我现在 有十个选项  我也希望利用这样的判断逻辑,让用户 复选 选好以后,我希望从加总值  就可以判断  他选了哪几个……….那这样 我这10个选项的 应该赋予多少呢??


这个想法或者说这个问题,我实在不知道该如何定义这个名词,我相信在程序设计里面,这样的问题应该有一个专有名词,再谈这个问题,不知道是否 有前辈高人,了解我意思的,可以告诉我方向 去弄懂这些东西


我相信 要达成这样的目的  10个选项的值 应该有一定的关系在,只是这个好像又变成是 数学问题了……..


本帖子中包含更多资源

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

×
发表于 2020-9-12 11:08:32 | 显示全部楼层
Const $FC_NOOVERWRITE = 0
Const $FC_OVERWRITE = 1
Const $FC_CREATEPATH = 8
Local $Attr = 9
If BitAND($Attr, $FC_NOOVERWRITE) = $FC_NOOVERWRITE Then MsgBox(0, 0, '我包含 $FC_NOOVERWRITE')
If BitAND($Attr, $FC_OVERWRITE) = $FC_OVERWRITE Then MsgBox(0, 0, '我包含 $FC_OVERWRITE')
If BitAND($Attr, $FC_CREATEPATH) = $FC_CREATEPATH Then MsgBox(0, 0, '我包含 $FC_CREATEPATH')
 楼主| 发表于 2020-9-12 11:27:08 | 显示全部楼层
haijie1223 发表于 2020-9-12 11:08
Const $FC_NOOVERWRITE = 0
Const $FC_OVERWRITE = 1
Const $FC_CREATEPATH = 8

這是判斷 包不包含 我懂................

我想問的是  如何定義出
$FC_NOOVERWRITE =0
$FC_OVERWRITE =1
$FC_CREATEPATH =8
$FC_CREATEPATH2= ??
$FC_CREATEPATH3= ??


假設我的選項 不只上面  那麼 $FC_CREATEPATH2 跟 $FC_CREATEPATH3  各應該是多少??  這些值 之間有甚麼關係??

難道是我隨便定義的嗎  假設 我自己的變數  可以定義成
$FC_N1 =1
$FC_N2 =2
$FC_N3 =3
$FC_N4= 4
$FC_N5=5

這樣加總起來 都可以在去判斷就好嗎??
发表于 2020-9-12 11:37:41 | 显示全部楼层
这些都是AU3的常量或者是API的常量,当然AU3的很多常量也是来自于MSDN。这些都是提前规定好的,在AU3内部封装的时候就已经写好了。所以只需要去查帮助说明即可。不存在自己定义这一说,当然你非要改个名字去定义也可以,只要值符合他的要求就行。
至于值的组合,就是Bitor。
 楼主| 发表于 2020-9-12 11:46:05 | 显示全部楼层
haijie1223 发表于 2020-9-12 11:37
这些都是AU3的常量或者是API的常量,当然AU3的很多常量也是来自于MSDN。这些都是提前规定好的,在AU3内部封 ...

我知道  我是想知道 如果我的問題如圖片 所表示

那麼我的A B C D E 之間應該用甚麼值

才有辦法從 加總值判斷 組合?


本帖子中包含更多资源

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

×
发表于 2020-9-12 12:09:20 | 显示全部楼层
kk_lee69 发表于 2020-9-12 11:46
我知道  我是想知道 如果我的問題如圖片 所表示

那麼我的A B C D E 之間應該用甚麼值

谁说属性值是这么直接相加的。
上面不是说了么,多个值组合是用Bitor。Const $A = 1, $B = 2, $C = 3, $D = 4, $E = 5
Local $Attr = BitOR($A, $E)
MsgBox(0, 0, $Attr)
$Attr = BitOR($A, $B, $C)
MsgBox(0, 0, $Attr)

你自己看看 BitOR($A, $E) 和  BitOR($A, $B, $C)的值一样不?
而判断由哪些值组合是用BitAnd,上面也给你回复了。
发表于 2020-9-12 12:13:12 | 显示全部楼层
这是简单的位运算逻辑,因此自己定义12345是不行的。需要用二进制的位表达对应的数字
发表于 2020-9-12 12:15:45 | 显示全部楼层
afan 发表于 2020-9-12 12:13
这是简单的位运算逻辑,因此自己定义12345是不行的。需要用二进制的位表达对应的数字

为函数定义常量时,那些资深程序员肯定是考虑到了各种情况,根据每位的值做出了合理的属性值。
楼主的疑惑应该是在属性值的组合上,他以为属性值的组合是直接相加。
 楼主| 发表于 2020-9-12 12:20:41 | 显示全部楼层
haijie1223 发表于 2020-9-12 12:09
谁说属性值是这么直接相加的。
上面不是说了么,多个值组合是用Bitor。Const $A = 1, $B = 2, $C = 3, $ ...

我好像懂了你的意思了................ 晚點回家 我在琢磨 看看 ..............
 楼主| 发表于 2020-9-12 12:21:22 | 显示全部楼层
afan 发表于 2020-9-12 12:13
这是简单的位运算逻辑,因此自己定义12345是不行的。需要用二进制的位表达对应的数字

我好像懂了你的意思了................ 晚點回家 我在琢磨 看看 ..............
发表于 2020-9-12 12:26:34 | 显示全部楼层
kk_lee69 发表于 2020-9-12 12:21
我好像懂了你的意思了................ 晚點回家 我在琢磨 看看 ..............

正因为这些属性值,别人设计时是合理的,一般不会出现你所谓的 1 2 3 4 5这样的值,所以才可以直接相加,因为和bitor得到的结果是一样的。你给的 1 2 3 4 5 明显不合理,所以直接相加和bitor结果不一样,才会让你觉得无法判断组合。
 楼主| 发表于 2020-9-12 12:40:55 | 显示全部楼层
haijie1223 发表于 2020-9-12 12:15
为函数定义常量时,那些资深程序员肯定是考虑到了各种情况,根据每位的值做出了合理的属性值。
楼主的疑 ...

是阿  我的確以為是 【他以为属性值的组合是直接相加】
发表于 2020-9-12 19:48:16 | 显示全部楼层
每一级,一定要超前面的总和 就 ok 的了
发表于 2020-9-12 20:13:09 | 显示全部楼层
绿色风 发表于 2020-9-12 19:48
每一级,一定要超前面的总和 就 ok 的了

简单来说,一般从1开始,翻2倍,如:0、1、2、4、8、16、32、64、128、256、512、1024、2048、……
发表于 2020-9-12 20:16:51 | 显示全部楼层
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 07:58 , Processed in 0.090559 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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