如何从加总值 拆解出 是 A+C+D 还是A+B 或者是 A+C , 那么A,B C是怎样的关系[已解決]
本帖最后由 kk_lee69 于 2020-9-12 13:17 编辑一直有个疑问 拿 FileMove这个函数来说好了 里面参数标志为
[可选参数] 确定是否覆盖已存在的档:
可以是以下值的组合:
0 = (默认) 不覆盖已存在的文件
1 = 覆盖已存在的文件
8 = 自动创建不存在的目标目录结构 (见备注).
所以 9 等于 1+8
我一直好奇 为什么用1 跟 8,同样的疑问 包括了 风格有很多的值,但是我们总能够知道某一个值 就是A+C+D 的结果,而不是 A+B 的结果
我的疑惑就是:
【如果 我现在 有十个选项我也希望利用这样的判断逻辑,让用户 复选 选好以后,我希望从加总值就可以判断他选了哪几个……….那这样 我这10个选项的 值 应该赋予多少呢??】
这个想法或者说这个问题,我实在不知道该如何定义这个名词,我相信在程序设计里面,这样的问题应该有一个专有名词,再谈这个问题,不知道是否 有前辈高人,了解我意思的,可以告诉我方向 去弄懂这些东西
我相信 要达成这样的目的这10个选项的值 应该有一定的关系在,只是这个好像又变成是 数学问题了……..
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')
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
這樣加總起來 都可以在去判斷就好嗎??
这些都是AU3的常量或者是API的常量,当然AU3的很多常量也是来自于MSDN。这些都是提前规定好的,在AU3内部封装的时候就已经写好了。所以只需要去查帮助说明即可。不存在自己定义这一说,当然你非要改个名字去定义也可以,只要值符合他的要求就行。
至于值的组合,就是Bitor。 haijie1223 发表于 2020-9-12 11:37
这些都是AU3的常量或者是API的常量,当然AU3的很多常量也是来自于MSDN。这些都是提前规定好的,在AU3内部封 ...
我知道我是想知道 如果我的問題如圖片 所表示
那麼我的A B C D E 之間應該用甚麼值
才有辦法從 加總值判斷 組合?
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,上面也给你回复了。
这是简单的位运算逻辑,因此自己定义12345是不行的。需要用二进制的位表达对应的数字 afan 发表于 2020-9-12 12:13
这是简单的位运算逻辑,因此自己定义12345是不行的。需要用二进制的位表达对应的数字
为函数定义常量时,那些资深程序员肯定是考虑到了各种情况,根据每位的值做出了合理的属性值。
楼主的疑惑应该是在属性值的组合上,他以为属性值的组合是直接相加。 haijie1223 发表于 2020-9-12 12:09
谁说属性值是这么直接相加的。
上面不是说了么,多个值组合是用Bitor。Const $A = 1, $B = 2, $C = 3, $ ...
我好像懂了你的意思了................ 晚點回家 我在琢磨 看看 .............. afan 发表于 2020-9-12 12:13
这是简单的位运算逻辑,因此自己定义12345是不行的。需要用二进制的位表达对应的数字
我好像懂了你的意思了................ 晚點回家 我在琢磨 看看 .............. kk_lee69 发表于 2020-9-12 12:21
我好像懂了你的意思了................ 晚點回家 我在琢磨 看看 ..............
正因为这些属性值,别人设计时是合理的,一般不会出现你所谓的 1 2 3 4 5这样的值,所以才可以直接相加,因为和bitor得到的结果是一样的。你给的 1 2 3 4 5 明显不合理,所以直接相加和bitor结果不一样,才会让你觉得无法判断组合。 haijie1223 发表于 2020-9-12 12:15
为函数定义常量时,那些资深程序员肯定是考虑到了各种情况,根据每位的值做出了合理的属性值。
楼主的疑 ...
是阿我的確以為是 【他以为属性值的组合是直接相加】 每一级,一定要超前面的总和 就 ok 的了
绿色风 发表于 2020-9-12 19:48
每一级,一定要超前面的总和 就 ok 的了
简单来说,一般从1开始,翻2倍,如:0、1、2、4、8、16、32、64、128、256、512、1024、2048、…… https://www.autoitx.com/thread-72149-1-1.html?_dsign=08e6961b
页:
[1]
2