怎样在VB中实现变量X的左移N位操作??

ylovebaby44233 2005-03-23 07:52:54
请教大家一段代码,已知X是整形变量(两个字节),怎样实现左移N位和循环左移N位??希望各位高手能够将代码写在下面,最好有点注释:),谢谢大家啊!
...全文
616 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingZFX 2005-03-23
  • 打赏
  • 举报
回复
^_^
  • 打赏
  • 举报
回复
如果还有别的要求给我发短消息,我再贴点儿移位的东西,不要就算了*^_^*
老汉 2005-03-23
  • 打赏
  • 举报
回复
呵呵,都解了。

偶蹭点分算了。
Gutta 2005-03-23
  • 打赏
  • 举报
回复
很简单啊,如果说你要循环移位的话:
以右移为例子:

For i=1 to N
SaveHi = Myb(0) '保存高位,是为了判断右移时是否向低位字节进1
SaveLo= Myb(1) '保存低位,是为了循环移位,如果末尾移出了1
'以下是右移'''''''''''''''''''''''''''''''''''''
Myb(0) = Myb(0) \ 2 '右移不会溢出的
Myb(1)= Myb(1) \ 2
If ((SaveHi And &H1) = &H1) Then
Myb(1) = Myb(1) Or &H80
End If
If ((SaveLo And &H1) = &H1) Then
//这个判断就是用来判断是否移出了1,如果移出一,则最高位补一个1
Myb(0)= Myb(0) or &H80
End if
Next

好了,解决了,左移也同样道理。
XunBaian 2005-03-23
  • 打赏
  • 举报
回复
To: Gutta(冯大狂)

是不是仅考虑溢出就行了,符号通过位移后应该可以充许改变的(如果用于加密,这是一定要的)
XunBaian 2005-03-23
  • 打赏
  • 举报
回复
更正:
变量m循环左移N位:
Dim I As Long

For I = 0 To N
m = m * 2 + (( m And &H8000) / &H8000)
Next I
Gutta 2005-03-23
  • 打赏
  • 举报
回复
这题我会解!
第一步,先把整形变量数(有正有负)转化为2进制数存放在一个Byte(0 to 1)中
Dim MyB(1) as byte
if N>=0 then
Myb(0)= N \ 256 //高位
Myb(1)= N mod 256 //低位
else
tmp=N*(-1)
Myb(0)= tmp \256
Myb(1)= tmp mod 256
Myb(0)= Not(Myb(0) and &H80) //将符号位取反
Myb(1)= Not(Myb(1)) +1
//以上两行是先求出正数N的二进制表示方法,然后把最高位置1(这样就是-N的原码了)
//然后把所有位都取反,末尾+1,这样就是-N的补码形式了,在计算机中负数是补码来存放的。
end if

转化好以后就是移位操作了,意味操作代码如下(假定你要移动N位)
For i=1 to N
SaveHi = Myb(0) '保存高位,是为了判断右移时是否向低位字节进1
'以下是右移'''''''''''''''''''''''''''''''''''''
Myb(0) = Myb(0) \ 2 '右移不会溢出的
Myb(1)= Myb(1) \ 2
If ((SaveHi And &H1) = &H1) Then
Myb(1) = Myb(1) Or &H80
End If
Next

如果是左移,也是一样:
For i=1 to N
SaveLo = Myb(1) '保存低位,是为了判断左移时是否向高位字节进1
'以下是右移'''''''''''''''''''''''''''''''''''''
Myb(0) = (Myb(0) * 2) mod &HFF '要取余,不然会溢出
Myb(1) = (Myb(1) * 2) mod &HFF
If ((SaveLo And &H80) = &H1) Then
Myb(0) = Myb(0) Or &H01 '高位进一
End If
Next

好了,转化和右移左移都完成了,去试一下,有问题再问!

对了,别忘记结帖哦,先谢谢先~!
XunBaian 2005-03-23
  • 打赏
  • 举报
回复
变量m循环左移N位:
Dim I As Long

For I = 0 To N
m = m * 2 + (( &HFFFF And &H8000) / &H8000)
Next I
XunBaian 2005-03-23
  • 打赏
  • 举报
回复
变量m左移n位右边补0:
m = m * 2 ^ n
XunBaian 2005-03-23
  • 打赏
  • 举报
回复
变量m左移一位右边补0:
m = m * 2

变量m左移一位右边补1:
m = m * 2 + 1

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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