📄 m16.htm
字号:
<html>
<head>
<title>VB教程</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<p align="center"><script src="../../1.js"></script></a>
<body bgcolor="#ffffff" leftmargin="5" topmargin="1" marginheight="5" marginwidth="5">
<div align=center>
<table border=0 cellpadding=0 cellspacing=0 width=680 align="center">
<tbody>
<tr>
<td bgcolor=#000000 height=14>
<div align=center class=H1> <font color="#FFFFFF">VB程序中实现字节移位操作</font> </font> </font></div>
</td>
</tr>
<tr valign=top>
<td class=H1 height=236>
<p align="left"> <font color="#000000">来源:www.ccidnet.com<br>
<br>
在利用VB系统开发数据采集或工业控制软件,或对文件进行低级操作时,常需要对字节进行移位操作,但VB系统中没有提供字节移位操作的指令和函数,只提供了And(与)、Or(或)、Xor(异或)、Equ(同或)、Not(非)等几个逻辑运算指令。笔者在用VB系统开发工业控制软件的过程中,就遇到了这个问题,于是利用VB中已有的逻辑运算指令,模拟汇编语言的字节移位指令,编制了七个字节移位函数:逻辑左移、逻辑右移、算术右移、循环左移、循环右移、进位循环左移和进位循环右移。
<br>
<br>
在汇编语言指令中,逻辑左移的功能相当于乘2, 逻辑右移的功能相当于除2,利用这个特性,在VB程序中用乘2和除2方法实现位的左移和右移,然后再用And(与)和Or(或)逻辑运算指令,判断移位过程中是否有进位发生,将进行标志置位。
<br>
<br>
程序清单 <br>
CF是进位标志,采用Boolean类型逻辑变量,如果CF为True表示有进位,为False则表示无进位。 <br>
<br>
Public CF As Boolean '进位标志 <br>
<br>
'1.逻辑左移 <br>
<br>
Public Function SHL(OPR As Byte, n As Integer) As Byte<br>
Dim BD As Byte<br>
Dim I As Integer<br>
BD = OPR<br>
For i = 1 To n - 1<br>
BD = (BD And &H7F) * 2 '将D7位屏蔽左移,防止字节溢出<br>
Next i<br>
CF = BD And &H80 '判断D7位是否进位<br>
SHL = (BD And &H7F) * 2<br>
End Function<br>
<br>
<br>
'2.逻辑右移 <br>
<br>
Public Function SHR(OPR As Byte, n As Integer) As Byte<br>
Dim BD As Byte<br>
Dim I As Integer<br>
BD = OPR<br>
For i = 1 To n - 1<br>
BD = BD \ 2 '右移<br>
Next i<br>
CF = BD And 1 '判断D0位是否进位<br>
SHR = BD \ 2<br>
End Function<br>
<br>
<br>
'3.算术右移 <br>
<br>
Public Function SAR(OPR As Byte, n As Integer) As Byte<br>
Dim BD As Byte<br>
Dim I As Integer<br>
Dim Fg1 As Byte<br>
BD = OPR<br>
Fg1 = BD And &H80<br>
For i = 1 To n - 1<br>
BD = BD \ 2 '右移<br>
Next i<br>
CF = BD And 1 '判断D0位是否进位<br>
BD = BD \ 2 '右移<br>
SAR = BD Or Fg1<br>
End Function<br>
<br>
<br>
'4.循环左移 <br>
<br>
Public Function ROL(OPR As Byte, n As Integer) As Byte<br>
Dim BD As Byte<br>
Dim I As Integer<br>
Dim Fg1 As Byte<br>
BD = OPR<br>
For i = 1 To n<br>
Fg1 = (BD And &H80) \ 128 '判断D7位是否进位<br>
BD = ((BD And &H7F) * 2) Or Fg1 '带进位左移<br>
Next i<br>
CF = Fg1<br>
ROL = BD<br>
End Function<br>
<br>
<br>
'5.循环右移 <br>
<br>
Public Function ROR(OPR As Byte, n As Integer) As Byte <br>
</font> <br>
</span> </span>
</b></font> </p>
</td>
</tr>
</table>
</div>
<p align="center"><a href="../../pian/vb.htm">回首页</a>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -