大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
逻辑运算符中所含的And 运算符,Eqv 运算符,Imp 运算符,Not 运算符,Or 运算符,Xor 运算符等均可用来实现位运算。
成都创新互联是一家专注于网站建设、网站制作与策划设计,兴庆网站建设哪家好?成都创新互联做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:兴庆等地区。兴庆做网站价格咨询:18982081108
算术运算符的* 运算符,\ 运算符可用于左移和右移位运算。
And 运算符,还对两个数值表达式中位置相同的位进行逐位比较,并根据下表对 result 中相应的位进行设置:
Or 运算符,对两个数值表达式中位置相同的位进行逐位比较,并根据下表对 result 中相应的位进行设置:
Xor 运算符既可作为逻辑运算符,也可作为位运算符。使用互斥或的逻辑进行的两个表达式的逐位比较,其结果通过下表说明:
详细的参考:MSDN6.0关于运算符的介绍。
"位运算就是对字节或字节内的二进制位数进行测试、抽取、设置或移位等操作。因此位运算不能是float、double、long double等其他复杂的数据类型,只能是标准的char和int数据类型"(在VB中意味着可以对byte、integer、long类型进行位运算操作。
以上摘自《C语言程序设计》--人民邮电出版社一书,我自学C语言用的教材。建议你学习一些C语言的基本知识,因为C语言比VB更贴近硬件,因此能够帮助你理解一些VB中的概念。
C语言中的基本的位运算操作有按位与,按位或,按位异或,按位置反以及左、右移位操作。
VB中我只用过按位与(AND)、按位或(OR)、按位异或(XOR)。其他的需要自己添加代码模拟。
具体各位运算的含义可以自己查阅相关文献、书刊。空间有限,我就不贴出来了。
你应该知道的常识:
(一)1 Byte = 8 bit 一个字节在存储器中占8位;
(二)在VB中,integer类型的范围为-32768(-2^15)~ 32767(2^15-1),占两个字节,总共16位;
(三)计算机内存中,所有数据都以二进制格式存储。正数的最高位为0,后面的0/1序列与其绝对值的二进制形式相同,正数的原码、反码、补码完全一致。
下面给出问题的分析步骤:
根据上面的结论,123在内存中的存储方式是这样的:
(二进制位)15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
(整数123) 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1
(你要的结果)0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1
形式上= 123+2^2=123+4=127。
因此,如果不用位运算,用123+4(4的二进制的表达最后三位是100,其余全为0)就得到了你要的结果。但是很多情况下我们可以省去自己计算的麻烦,直接用位运算解决。
上面的式子的效果与 123 与( xxxx xxxx xxxx x1xx)做按位或运算是一样的。
x为0或1都不影响结果,只要确保第三位为1.
所以,你想让原有的数某一位或某几位变为1,只要将这个数与对应位为1的数做Or运算即可。
因此上面的式子等效于 123 Or 4(100) 或者 123 Or 7 (111) 或者 123 Or 127(111 1111),等等。
用bitarray类和BitVector32类实现
VB实现大致如下:
Imports System.Collections.Specialized
...
Dim bvData as BitVector32
Dim sec1 As BitVector32.Section = BitVector32.CreateSection(255)
Dim sec2 As BitVector32.Section = BitVector32.CreateSection(255,sec1)
Dim sec3 As BitVector32.Section = BitVector32.CreateSection(255,sec2)
Dim sec4 As BitVector32.Section = BitVector32.CreateSection(255,sec3)
Dim Buf(4096) as Byte 'receive byte size matched with DSP send data: 1024*4Byte
Dim recCount as Integer
Dim Data(1024) as long
....
For recCount = 0 To 1023
bvData(sec4) = buf(recByte*4)
bvData(sec3) = buf(recByte*4+1)
bvData(sec2) = buf(recByte*4+2)
bvData(sec1) = buf(recByte*4+3)
Data(recCount) = bvData.Data '这样数据肯定是-398
Next
....
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运算符~
不过可以通过"自定义运算符"来写出我们想要的功能