首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

vb能够像汇编那样,对一个字节进行拆分、左右移位、与、或、非、异或吗?该怎么解决

2012-01-23 
vb能够像汇编那样,对一个字节进行拆分、左右移位、与、或、非、异或吗?我到这里不是为了争分。只是觉得这里有很

vb能够像汇编那样,对一个字节进行拆分、左右移位、与、或、非、异或吗?
我到这里不是为了争分。只是觉得这里有很多热情的、专业的、称职的老师。
所以这两天连着问问题。在这里问比在msdn上查还有针对性。



vb能够像汇编那样,对一个字节进行拆分(高四位、低四位)、对一个字节进行左、右移位、与、或、非、异或吗?

先谢谢了!

[解决办法]
And &HF0 '取高4位
And &H0F '取低4位
* 2 '左移1位
\ 2 '右移1位
And '与
OR '或
Not '非
Xor '异或

这些都是基础知识
[解决办法]
能够拆分出高4位、低四位:
C8h ----> H = &HC8 \ 16   L = &HC8 And 15

移位:
只有用乘除法来间接实现,因为存在溢出问题,相对麻烦些。
但你说只对一个字节进行移位,那就没问题了。用Long变量来做中介,没任何麻烦。
右移,用除法:
C8h >> 3 ----> &HC8 \ 8
左移,用乘法:
C8h << 2 ----> (&HC8 * 4) And &Hff

与、或、非、异或:
与 And ----> &HC8 And 15 (= 8)
或 Or ----> &HC8 Or 15 (= &HCF)
非 Not
Dim bNum As Byte
bNum = &HC8
bNum = Not bNum (bNum = &H37)
异或 Xor ----> &HC8 Xor &H63 ( = &HAB)

[解决办法]
也许像我这样按部就班学东西的人不适合现在这个时代了吧?

不过,如果你要写的东西要用于实际产品的话,建议还是认真看一下MSDN的程序员手册的Part One,讲得很基础。如果什么都不懂,就拷贝一些勉强理解了的代码到产品里去,总觉得对产品不够负责。
[解决办法]
只能用乘除法做位移,没别的办法了
用乘法实现左移可能导致溢出
可以设置工程属性,在优化里面选中“取消整数溢出检查”
[解决办法]
对于左移,右移VB没有直接的指令实现,Delphi有
[解决办法]

探讨
slowgrace感谢你的教诲。我知道有我们在这里讨论的功夫,如果按照上面人的热心指点我也试出来了。
我只是想看一下高手们写的漂亮语句和高手处理问题的思维方式。另外,我只是一年使用一两次vb,和软件高手们的确差得太远。我到现在还没有感觉到主动和高手学习点经验有什莫不对。另外,vb里除了\2 和×2就没有别的招了吗?类似于
rol a
ror a
的语句吗。

这两天有点烦,不想自己试了。如果这里实在没人出手。那天我有时间,一定按照你的意思和上面的人的指点去做实验。

多谢!

[解决办法]
探讨
我在上面的程序试了一下:
  1 左移 10次 等于 400 (如果是16进制则=1024 正确)

  24 左移两次 等于 90  好像不对了吧!

那位给指导一下!

谢谢!

[解决办法]
探讨
这个贴子不白顶
第一次知道VB还有eqv imp这两个运算符
得琢磨琢磨在哪里能用上这两的东东

[解决办法]
用乘法实现左移可能导致溢出 
可以设置工程属性,在优化里面选中“取消整数溢出检查”

=====================================================================================

溢出是可以预防的:

a = (a And &H7F) * 2

a = (a And &H3F) * 4

......

[解决办法]
探讨
用乘法实现左移可能导致溢出
可以设置工程属性,在优化里面选中“取消整数溢出检查”

=====================================================================================

溢出是可以预防的:

a = (a And &H7F) * 2

a = (a And &H3F) * 4

......


[解决办法]

另外,不解的是“当 a≥ 16384 时,(a And &H7F) * 2 就溢出了。”是如何溢出的。

16384 And &H7F = 0
0 * 2 = 0

8192 And &H3F = 0
0 * 4 = 0

热点排行