设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1806|回复: 4
打印 上一主题 下一主题

[已经解决] 请教这个"|="到底是神马意思!

[复制链接]

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
跳转到指定楼层
1
发表于 2021-12-4 02:13:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
研究了半天也没弄明白,比如:
a = 3
b = 2
a |= b
p a
P出来的a是3
但要是
a = 3
b = 4
a |= b
p a
P出来的a却是7

尤其是在默认脚本Game_Battler_2中的第282行effective |= self.state?(i) (位于def states_minus(minus_state_set)),这里的|=到底是神马意思呢?

  1.   #--------------------------------------------------------------------------
  2.   # ● 状态变化 (-) 的使用
  3.   #     minus_state_set : 状态变化 (-)
  4.   #--------------------------------------------------------------------------
  5.   def states_minus(minus_state_set)
  6.     # 清除有效标志
  7.     effective = false
  8.     # 循环 (解除状态)
  9.     for i in minus_state_set
  10.       # 如果这个状态被附加则设置有效标志
  11.       effective |= self.state?(i)
  12.       # 设置状态变化标志
  13.       @state_changed = true
  14.       # 解除状态
  15.       remove_state(i)
  16.     end
  17.     # 过程结束
  18.     return effective
  19.   end
复制代码


还请大家指点指点,多谢了!

Lv4.逐梦者

梦石
0
星屑
7954
在线时间
744 小时
注册时间
2018-11-3
帖子
8
2
发表于 2021-12-4 02:57:49 | 只看该作者
这个是位运算符,计算之前把两个数写成二进制。

比如 a = 3 = 0011B,b = 2 = 0010B
那么 a | b 的结果是按位做或运算,如下
  a     0   0   1   1
  b     0   0   1   0
a|b    0   0   1   1
所以结果是 0011B = 3

同样的如果 a = 3 = 0011B,b = 4 = 0100B,那么算出来 a|b = 0111B = 7

你贴出来的这一段里面 effective 和方法 self.state? 返回的都是 T / F
对true / false 做运算时位或 | 和逻辑或 || 效果一样的
就等同于写 effective ||= self.state?(i)

点评

大神你和下面大神的讲解解决了我整整5年来一直没明白的按位或的问题!再次感谢!  发表于 2021-12-5 14:30

评分

参与人数 2星屑 +50 +2 收起 理由
RyanBern + 50 + 1 认可答案
taeckle + 1 多谢大神指点!

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14106
在线时间
2141 小时
注册时间
2019-1-24
帖子
1121

R考场第七期纪念奖

3
发表于 2021-12-4 09:41:43 | 只看该作者
从菜刀大大那先学现卖下,|= 是叫做  位或
true |=true   #=>true
true |=false  #=>true
false | true   #=>true
false | false  #=>false
从这里得到只有这个符号左右两边都是false,结果才是false.

接下来再从你的代码入手
首先,这段代码初始effective = false
effective |= self.state?(i) 等价于  effective = effective | self.state?(i)

也就是 effective = false | self.state?(i)  
从这可以看出来 self.state?(i)  如果是true  最终effective 就是true,
self.state?(i)  如果是false 最终effective 就是false,

点评

大神你和上面大神的讲解解决了我整整5年来一直没明白的按位或的问题!再次感谢!  发表于 2021-12-5 14:30

评分

参与人数 2星屑 +50 +2 收起 理由
RyanBern + 50 + 1 认可答案
taeckle + 1 多谢大神指点!

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-26 05:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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