VB.net 运算符顺序问题!!!

dclx2012 2016-12-06 11:40:16
下面一段代码 Status(561))结果是 "Success",Status(77) ' 结果是"Success",(Status(562)'结果是"Errors" (Status(888) 结果是"others" 为什么? 万分感谢~


Public Class Form1
Const b As Integer = 1
Const c As Integer = 2
Public Function Status(ByVal CompStat As Integer) As String
' This function interprets a status variable and returns a string
If ((CompStat And b) = b) Then
Status = "Success"
ElseIf ((CompStat And c) = c) Then
Status = "Errors"
Else
Return "others"
End If

End Function

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MsgBox(Status(561)) ' "Success"
MsgBox(Status(77)) ' "Success"
MsgBox(Status(562)) '"Errors"
MsgBox(Status(888)) '"others"
End Sub
End Class
...全文
212 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
拜一刀 2016-12-07
  • 打赏
  • 举报
回复
        If ((CompStat And 1) = 1) Then   '奇数,之前说了
            Return 1
        ElseIf ((CompStat And 32) = 32) Then    '32=0x100000 除64余32以上?
            Return 2  ' 
        ElseIf ((CompStat And 4) = 4) Then     '4=0x100 除8余4以上?后面几个以此类推,感觉太复杂了,用十进制很难说出什么意义
'我感觉像在处理一条状态数据或者报警数据,二进制每位代表不同的含义并有不同的优先级(根据elseif的顺序),比如末位如果是1则优先报err1,第六位是1且末位为0才报err2之类的,总之应该和业务挂钩吧,要理解含义应该先看CompStat是怎么来的
            Return 3 '   
        ElseIf ((CompStat And 2) = 2) Then     '2=0x10
            Return 4     '
        ElseIf ((CompStat And 16) = 16) Then     '16=0x10000
            Return 5
        ElseIf ((CompStat And 8) = 8) Then     '8=0x1000
            Return 6
        Else
            Return 7
        End If
Tiger_Zhao 2016-12-07
  • 打赏
  • 举报
回复
当操作数是数值时,And 是位运算的与运算符。 Windows自带的计算器,科学型模式下,不仅有 And 运算符,还有二进制格式可选; 你自己去试试程序中对应的运算,很好理解的。
dclx2012 2016-12-06
  • 打赏
  • 举报
回复
引用 2 楼 zeratul1990 的回复:
就是与吧? (CompStat And b) = b 和0x01做与,所以二进制末位是1,这个就是奇数吧? (CompStat And c) = c 和0x10做与,所以二进制倒数第二位是1,这应该是被4除余2或者3?当然奇数已经排除了,就是余2咯, else就是能被4整除的了吧
再来个复杂的 这个又是怎么运算的? 厉害了! Public Function Status(ByVal CompStat As Integer) As Integer If ((CompStat And 1) = 1) Then Return 1 ElseIf ((CompStat And 32) = 32) Then Return 2 ' ElseIf ((CompStat And 4) = 4) Then Return 3 ' ElseIf ((CompStat And 2) = 2) Then Return 4 ' ElseIf ((CompStat And 16) = 16) Then Return 5 ElseIf ((CompStat And 8) = 8) Then Return 6 Else Return 7 End If End Function
dclx2012 2016-12-06
  • 打赏
  • 举报
回复
引用 2 楼 zeratul1990 的回复:
就是与吧? (CompStat And b) = b 和0x01做与,所以二进制末位是1,这个就是奇数吧? (CompStat And c) = c 和0x10做与,所以二进制倒数第二位是1,这应该是被4除余2或者3?当然奇数已经排除了,就是余2咯, else就是能被4整除的了吧
感觉分析的是正确的,确实是奇数第一个对,第二个除2余2 .
拜一刀 2016-12-06
  • 打赏
  • 举报
回复
就是与吧? (CompStat And b) = b 和0x01做与,所以二进制末位是1,这个就是奇数吧? (CompStat And c) = c 和0x10做与,所以二进制倒数第二位是1,这应该是被4除余2或者3?当然奇数已经排除了,就是余2咯, else就是能被4整除的了吧
  • 打赏
  • 举报
回复
莫名其妙............................

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧