'VB是没有移位命令的,但是可以自定义移位函数。
成都创新互联公司服务项目包括谢家集网站建设、谢家集网站制作、谢家集网页制作以及谢家集网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,谢家集网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到谢家集省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
'位左移
Public Function SHL(nSource As Long, n As Byte) As Long
SHL = nSource * 2 ^ n
End Function
'位右移
Public Function SHR(nSource As Long, n As Byte) As Long
SHR = nSource / 2 ^ n
End Function
'获得指定的位
Public Function GetBits(nSource As Long, n As Byte) As Boolean
GetBits = nSource And 2 ^ n
End Function
'设置指定的位
Public Function SetBits(nSource As Long, n As Byte) As Long
SetBits = nSource Or 2 ^ n
End Function
'清除指定的位
Public Function ResetBits(nSource As Long, n As Byte) As Long
ResetBits = nSource And Not 2 ^ n
End Function
'注:以上的所有函数,没有考虑溢出的问题,请自行添加相关处理。
对位模式执行数学左移位。
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 为负值,则将把它作为无符号的值,并使用相应的大小掩码进行屏蔽。
数学移位绝不会产生溢出异常。
注意只能对整型执行按位运算。浮点值必须转换为整型后,才能执行按位运算。按位运算采用二进制(以 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 运算符不支持按位运算。 追问: 好复杂啊...还是不会,还有整数怎么转换为二进制数? 回答: 为什么一定要用位运算呢,你那个乘法只能通过左移操作符“