VBA位操作
时间:2022-07-24
本文章向大家介绍VBA位操作,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
计算机在运行的过程中,所有的数据都是存储在内存中的,内存中的数据都是以二进制存储,也就是只有高电平(1)、低电平(0),而0和1其实只是为了让人方便理解。
计算机规定1个二进制叫做位bit,8个bit叫做Byte,在VBA中,能操作的最小单元就是Byte。
可是很多时候,为了节约空间,很多程序都是利用bit位来代表某些信息的,比如ZIP压缩后的数据。
在VBA中,位操作符主要有
- And 运算符
- Eqv 运算符
- Imp 运算符
- Not 运算符
- Or 运算符
- Xor 运算符
这些操作符一般都用在IF语句的条件判断上,And和Or用的是最多的,这种用法比较好理解,这里就不去讲了。
主要讲讲位操作,很多语言都有移位的操作,但是VBA却没有,不过可以利用位操作符来实现移位函数。
首先需要明白,作为一个整数,左移和右移造成了什么改变。
01
左移
可以先拿10进制的数字来说,比如数字126,左移:
- 左移1位,变成了1260,也就是乘以了10
- 左移2位,变成了12600,也就是乘以了100
- 左移3位,变成了126000,也就是乘以了1000
规律很明显,就是数字本身乘以10的n次方。
02
右移
右移:
- 右移1位,变成了12,也就是除以了10,再向下取整
- 右移2位,变成了1,也就是除以了100,再向下取整
- 右移3位,变成了0,也就是除以了1000,再向下取整
规律很明显,就是数字本身除以10的n次方后向下取整。
如果换成了二进制的话,那么就是乘以或者除以2的n次方。
03
代码实现
左移,需要注意乘2的时候是否会溢出:
Function BitMoveLeft(ByRef V As Long, num As Long) As Long
Dim i As Long
Dim flag As Boolean '是否要把第32位转换为1
For i = 1 To num
'判断第31位是否=1
If V >= &H40000000 Then
flag = True
'把第31位置换为0
V = V And &H3FFFFFFF
Else
flag = False
End If
V = V * 2
Next
If flag Then
V = V Or &H80000000
End If
BitMoveLeft = V
End Function
右移,需要注意负数的情况:
Function BitMoveRight(ByRef l As Long, num As Long) As Long
Dim iStart As Long
iStart = 1
If l < 0 Then
'第32位置换为0
l = l And &H7FFFFFFF
l = l 2
'第31位置换为1
l = l Or &H40000000
iStart = 2
End If
Dim i As Long
For i = iStart To num
l = l 2
Next
BitMoveRight = l
End Function
- 服务端常见性能隐患分享
- ExtJs学习笔记(19)_复杂Form示例
- Linux快速入门01-基础概念
- SQL学习之Insert的特殊用法(插入检索出的数据,表之间的数据复制)
- 对php多态的理解
- JavaScript值延迟脚本和异步脚本
- JavaScript之arguments.callee
- JavaScript之面向对象学九(原型式继承和寄生式继承)
- ExtJs学习笔记(18)_ExtJs嵌入FCK示例
- Html与CSS快速入门01-基础概念
- 利用Fck的javascript-API创建fck编辑器
- ASPNET_WEBAPI快速学习02
- ExtJs学习笔记(17)_table布局
- Markdown快速入门
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux centos7 下安装 phpMyAdmin的教程
- 简单学习Android TextView
- Android 滑动返回Activity的实现代码
- centos7搭建hadoop2.10高可用(HA)
- 在 React 中实现 keep alive(可参与文末讨论哦)
- Android仿淘宝切换商品列表布局效果的示例代码
- android 右滑返回的示例代码
- 关于linux服务器hosts文件配置详解
- android中Glide实现加载图片保存至本地并加载回调监听
- CentOS8部署LNMP环境之编译安装mysql8.0.29的教程详解
- Android获取内置sdcard跟外置sdcard路径
- Android简易电话拨号器实例详解
- Linux 为特定的用户或用户组启用或禁用 SSH的方法
- Android 中IntentFilter的匹配规则实例详解
- Android VideoCache视频缓存的方法详解