扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
注意只能对整型执行按位运算。浮点值必须转换为整型后,才能执行按位运算。按位运算采用二进制(以 2 为基)形式计算两个整数值。它们比较对应位置上的位,然后基于比较的结果赋值。下面的示例演示了 And 运算符。复制Dim x As Integerx = 3 And 5 前面的示例将 x 的值设置为 1。发生这种情况的原因如下:这些值以二进制形式处理:二进制格式的 3 为 011二进制格式的 5 为 101And 运算符比较这些二进制表示方式,一次比较一个二进制位置(位)。如果给定位置的两个位都为 1,则将 1 放在结果中的该位置。如果任何一个位是 0,则将 0 放在结果中的该位置。在前面的示例中,按如下所示计算结果:011(二进制格式的 3)101(二进制格式的 5)001(二进制格式的计算结果)计算结果以十进制形式处理。值 001 是 1 的二进制表示形式,因此 x = 1。除了在任何一个比较位是 1 或两个比较位都是 1 的情况下将 1 赋予结果位以外,按位 Or 运算与此类似。Xor 在比较的位正好只有一个是 1(而不是两者都是 1)时将 1 赋给结果位。Not 采用单个操作数并反转所有位(包括符号位),然后将该值赋予结果。这意味着,对于有符号正数,Not 始终返回负值,而对于负数,Not 始终返回正值或零。AndAlso 和OrElse 运算符不支持按位运算。 追问: 好复杂啊...还是不会,还有整数怎么转换为二进制数? 回答: 为什么一定要用位运算呢,你那个乘法只能通过左移操作符“
成都创新互联主营鲁山网站建设的网络公司,主营网站建设方案,重庆APP软件开发,鲁山h5小程序定制开发搭建,鲁山网站营销推广欢迎鲁山等地区企业咨询
TextBox1.Text = 7 And 10
TextBox1.Text = 7 Or 10
TextBox1.Text = 7 Xor 10
TextBox1.Text = Not 10
TextBox1.Text = 7 10
TextBox1.Text = 7 10
如这些,我在VB.Net中也找不到shl和shr运算符~
不过可以通过"自定义运算符"来写出我们想要的功能
逻辑运算符中所含的And 运算符,Eqv 运算符,Imp 运算符,Not 运算符,Or 运算符,Xor 运算符等均可用来实现位运算。
算术运算符的* 运算符,\ 运算符可用于左移和右移位运算。
And 运算符,还对两个数值表达式中位置相同的位进行逐位比较,并根据下表对 result 中相应的位进行设置:
Or 运算符,对两个数值表达式中位置相同的位进行逐位比较,并根据下表对 result 中相应的位进行设置:
Xor 运算符既可作为逻辑运算符,也可作为位运算符。使用互斥或的逻辑进行的两个表达式的逐位比较,其结果通过下表说明:
详细的参考:MSDN6.0关于运算符的介绍。
我其实说的就是.net 位移运算符 这俩,没有所谓的位移等于 = =
VB赋值运算符中没有 你写的 只有+=,-=,/=,*=.^=,=这几个
比较运算符中也没有,只有=,= 这俩
所以你的问题,无法回答
对位模式执行数学左移位。
result = pattern amount
各部分说明
result
必选。整型数值。对该位模式进行移位的结果。数据类型与 pattern 的数据类型相同。
pattern
必选。整型数值表达式。要进行移位的位模式。数据类型必须为整型(SByte、Byte、Short、UShort、Integer、UInteger、Long 或 ULong)。
amount
必选。数值表达式。要将该位模式移位的位数。数据类型必须为 Integer 或扩展到 Integer。
备注
数学移位不是循环的,即不会将在结果的一端移出的数位从另一端重新移入。在数学左移位运算中,丢弃移出结果数据类型范围的数位,而将右端空出的数位位置设置为零。
为防止移位的结果超出它所支持的位数,Visual Basic 使用与 pattern 的数据类型相对应的大小掩码来屏蔽 amount 的值。可使用这些值的二进制与运算结果作为移位量。大小掩码如下所示:
pattern数据类型 掩码(十进制)掩码(十六进制)
SByte, Byte 7 H00000007
Short, UShort 15 H0000000F
Integer, UInteger 31 H0000001F
Long, ULong 63 H0000003F
如果 amount 为零,则 result 的值与 pattern 的值相同。如果 amount 为负值,则将把它作为无符号的值,并使用相应的大小掩码进行屏蔽。
数学移位绝不会产生溢出异常。
'窗体放置Panel1 ,Label1,Timer1控件各一个 Label1置于Panel1中
Dim Label_X As Integer
Dim Label_Y As Integer
Dim Panel_W As Integer
Dim Panel_H As Integer
Dim Label_W As Integer
Dim Label_H As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Panel1.Dock = DockStyle.Fill
Timer1.Start()
Label_X = 0
Label_Y = 0
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Panel_W = Panel1.Width
Panel_H = Panel1.Height
Label_W = Label1.Width
Label_H = Label1.Height
Label1.Location = New Point(Label_X, Label_Y) '设置控件新坐标
If Label_Y = 0 Then
Label_X = Label_X + 5 '5=每次位移距离
End If
If Label_X = Panel_W - Label_W Then
Label_Y = Label_Y + 5
End If
If Label_Y = Panel_W - Label_W Then
Label_X = Label_X - 5
End If
If Label_X = 0 Then
Label_Y = Label_Y - 5
End If
End Sub
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流