Project1
标题: 喔原来位运算可以这么玩 [打印本页]
作者: 有丘直方 时间: 2018-9-1 11:57
标题: 喔原来位运算可以这么玩
比如说咱有个Klass类,而Klass对象有一些bool型的属性,比如a,b,c,d之类的
我以前会这么写class Klass
attr_accessor :a, :b, :c, :d
def initialize
@a = false
@b = false
@c = false
@d = false
end
end
class Klass
attr_accessor :a, :b, :c, :d
def initialize
@a = false
@b = false
@c = false
@d = false
end
end
后来我发现了一种很神奇的写法……class Klass
FLAG_A = 0b0001
FLAG_B = 0b0010
FLAG_C = 0b0100
FLAG_D = 0b1000
def initialize
@flags = 0b0000
end
def set_flag(flag, bool)
bool ? @flags |= flag : @flags &= ~flag
end
def get_flag(flag)
@flags & flag == flag
end
end
class Klass
FLAG_A = 0b0001
FLAG_B = 0b0010
FLAG_C = 0b0100
FLAG_D = 0b1000
def initialize
@flags = 0b0000
end
def set_flag(flag, bool)
bool ? @flags |= flag : @flags &= ~flag
end
def get_flag(flag)
@flags & flag == flag
end
end
这难道就是位运算的真谛?
作者: defisym 时间: 2018-9-1 12:16
当初做蓝牙板子,多任务就是用的这一招,拿当前task ID按位与找相关的方法
然后我是做上位机的于是这部分就一点儿没听
反正用的东西比较主流面向搜索引擎编程就行了,当时做quartus老师一点不讲啥也不知道什么也搜不出来,硬着头皮上结果就是做不出来,还不如直接抄呢
作者: IamI 时间: 2018-9-1 12:34
来人,把vector<bool>拉出来鞭尸
作者: 空气 时间: 2018-9-1 18:02
既然用ruby了,就不要这么锱铢必较了,多用几个变量何必呢
作者: 晴兰 时间: 2018-9-3 09:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: 不死鸟之翼 时间: 2018-9-3 21:19
把整数当作flag用不是正常操作吗
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |