Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6516|回复: 4

[分享] [原创]位运算学习笔记

[复制链接]
发表于 2009-10-5 19:43 | 显示全部楼层 |阅读模式

关系运算符在这里实际上都是位运算

只写了第一个函数的注释,分析过程可借助windows自带的计算器

帮助里能查到的就没贴出来,浪费论坛空间[em04]

Function d(s)
'所有转大写
'大写比小写大32,大写字母第6位总为0,小写第6位为1
'32    :0010 0000
'not 32:1101 1111
'按位与 **** ****
'结果   **0* ****
Dim arr() As Byte
arr = s
For i = LBound(arr) To UBound(arr) Step 2
    arr(i) = arr(i) And (Not 32)
Next
d = arr
End Function


Function u(s) As String
'所有转小写
Dim arr() As Byte
arr = s
For i = LBound(arr) To UBound(arr) Step 2
    arr(i) = arr(i) Or 32
Next
u = arr
End Function

Function l(s)
'大小写互转
Dim arr() As Byte
arr = s
For i = LBound(arr) To UBound(arr) Step 2
    arr(i) = arr(i) Xor 32
Next
l = arr
End Function

Sub test()
Dim arr() As Byte
s = "LeolEe"
Debug.Print u(s), d(s), l(s)
End Sub

[此贴子已经被作者于2009-10-5 19:47:11编辑过]
发表于 2009-10-5 20:48 | 显示全部楼层

谢谢分享,在论坛第一次看到有发析位运算的帖子。

[em01]

补充:

  按位运算
按位运算采用二进制(以 2 为基)形式计算两个整数值。它们比较对应位置上的位,然后基于比较的结果赋值。下面的示例演示了 And 运算符。
Visual Basic

复制代码
Dim x As Integer
x = 3 And 5
前面的示例将 x 的值设置为 1。发生这种情况的原因如下:
• 这些值以二进制形式处理:
二进制格式的 3 为 011
二进制格式的 5 为 101
• And 运算符比较这些二进制表示方式,一次比较一个二进制位置(位)。如果给定位置的两个位都为 1,则将 1 放在结果中的该位置。如果任何一个位是 0,则将 0 放在结果中的该位置。在前面的示例中,按如下所示计算结果:
011(二进制格式的 3)
101(二进制格式的 5)
001(二进制格式的计算结果)
• 计算结果以十进制形式处理。值 001 是 1 的二进制表示形式,因此 x = 1。
除了在任何一个比较位是 1 或两个比较位都是 1 的情况下将 1 赋予结果位以外,按位 Or 运算与此类似。Xor 在比较的位正好只有一个是 1(而不是两者都是 1)时将 1 赋给结果位。Not 采用单个操作数并反转所有位(包括符号位),然后将该值赋予结果。这意味着,对于有符号正数,Not 始终返回负值,而对于负数,Not 始终返回正值或零。

回复

使用道具 举报

发表于 2009-10-5 20:53 | 显示全部楼层

qJlexE2h.rar (20.71 KB, 下载次数: 6)
回复

使用道具 举报

发表于 2009-10-5 21:11 | 显示全部楼层

有点意思。我这种玩玩的人就不深入了
回复

使用道具 举报

发表于 2009-10-5 21:12 | 显示全部楼层

学习               
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-29 10:57 , Processed in 0.300715 second(s), 4 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表