本帖最后由 真IKUN 于 2024-4-17 02:20 编辑
软件在附件,注释更详尽
比特位
比特位可以理解为转换成二进制之后每一位数,bit中文名称是位,音译“比特”,是用以描述电脑数据量的最小单位。
单个字符占一个字节通常是指字符的编码方式(即在ASCII编码中的字符表示),而整数占四个字节是指整数数据类型在计算机中的存储方式。这两个概念是不同的
在计算机中,整数是一个基本的数据类型,用于存储数值。整数的存储大小(即占用的字节数)取决于编程语言和计算机架构。在易语言里,整数(尤其是32位整数)通常占用4个字节。即1整数=4字节=32bit
十进制转换为二进制(在线进制转换器 | 菜鸟工具 (jyshare.com)https://www.jyshare.com/front-end/58/)
变量名 | 类 型 | 静态 | 数组 | 备 注 | i | 整数型 | | | number | 整数型 | | | text | 文本型 | | | 如果真 (数据 = “0”) 返回 (“0”)如果真 (数据 ≈ “-”) 返回 (“不支持当前格式”) number = 到整数 (数据)‘转换数据类型 判断循环首 (number ≠ 0 ) i = number % 2 number = number ÷ 2 text = 到文本 (i ) + text 判断循环尾 () 返回 (text )
命令:位与
调用格式: 〈整数型〉 位与 (整数型 位运算数值一,整数型 位运算数值二,... ) - 系统核心支持库->位运算 英文名称:band 如两个数值有某共同比特位为1,则返回值的对应位也为1,否则为0。返回计算后的结果。本命令为中级命令。命令参数表中最后一个参数可以被重复添加。 参数<1>的名称为“位运算数值一”,类型为“整数型(int)”。 参数<2>的名称为“位运算数值二”,类型为“整数型(int)”。
位与是一种基本的位运算符,用于在二进制层面上进行运算。大家可以理解为把两个十进制的参数,分别转换为二进制,进行逐位与操作,只有当两个十进制参数对应的二进制位都为1时,结果位才为1,得出的结果转换为十进制,返回十进制的结果
比如位与(11,12),就是把11和12转换为 1011, 1100 (不足的部分,用0补齐)进行逐个对比,如果二者都为1才是1,其他情况都是0
即
1011
1100
具体对位情况(左到右,右到左都行,看个人习惯,下面的是从右往左)
1-0=0
1-0=0
0-1=0
1-1=1
按你对位的顺序排列,(我是从右往左,所以就从最开始的对位往左填)就是1000
转为为十进制 1000=8
验证一下
调试输出 (位与 (11, 12))
*8
正确
接下来我们来学习一下不同位数的位与
比如位与(110,12)也就是1101110和1100(前面我们说过,不足的要用0补齐,所以12应该是0001100)
1101110
0001100
!!!从后向前对比!!!
0-0=0
1-0=0
1-1=1
1-1=1
0-0=0
1-0=0
按后先顺序排列,就是001100
转换到十进制也就是12
验证一下
调试输出 (位与 (110, 12))
*12
正确
命令:位或
调用格式: 〈整数型〉 位或 (整数型 位运算数值一,整数型 位运算数值二,... ) - 系统核心支持库->位运算
英文名称:bor
如两个数值中有一个数值的某一比特位不为零,则返回值的对应位就为1,否则为0。返回计算后的结果。本命令为中级命令。命令参数表中最后一个参数可以被重复添加。
参数<1>的名称为“位运算数值一”,类型为“整数型(int)”。
参数<2>的名称为“位运算数值二”,类型为“整数型(int)”。
与位类似,位或运算符会将两个参数的二进制位进行逐位或操作,只要两个对应的二进制位中有一个为1,结果位就为1,得出的结果转换为十进制,返回十进制的结果
命令:位取反
调用格式: 〈整数型〉 位取反 (整数型 欲取反的数值) - 系统核心支持库->位运算 英文名称:bnot 将指定数值每一个比特位的值取反后返回。本命令为中级命令。 参数<1>的名称为“欲取反的数值”,类型为“整数型(int)”。
位取反运算符会对一个数的二进制位进行逐位取反操作,即0变为1,1变为0,得出的结果转换为十进制,返回十进制的结果
' 就是把十进制转换成32位二进制(就是上面的十转二 跟32位差多少位就在前面补0)
' 然后把每一位的1换成0每一位的0换成1
' 比如说0的32位二进制是00000000000000000000000000000000
' 位取反之后就是11111111111111111111111111111111(也就是-1)
命令:位异或
调用格式: 〈整数型〉 位异或 (整数型 位运算数值一,整数型 位运算数值二,... ) - 系统核心支持库->位运算
英文名称:bxor
如两个数值对应比特位的值不相等,则返回值的对应位就为1,否则为0。返回计算后的结果。本命令为中级命令。命令参数表中最后一个参数可以被重复添加。
参数<1>的名称为“位运算数值一”,类型为“整数型(int)”。
参数<2>的名称为“位运算数值二”,类型为“整数型(int)”。
位异或运算符会将两个数的二进制位进行逐位异或操作,当两个对应的二进制位不同时,结果位为1,最后将结果转换为十进制返回
比如100(十进制1100100) 和10(1010)
位数不齐,前面补0
即
1100100
0001010
相同的是0,不同的是1
得到了1101110 转到十进制也就是110
我们测试一下
调试输出 (位异或 (100, 10))
得到110
正确
源码注释更详尽,可以去源码仔细看仔细学
应用场景有很多,下面简单概述一下:
优化性能:位运算通常比等效的算术运算更快,因为它们直接在二进制位上操作,不需要进行复杂的计算。这在处理大量数据或进行底层系统编程时尤为重要 权限控制:在操作系统和程序中,位运算常用于实现权限管理系统。每个权限可以对应一个位,通过位运算来判断用户是否具有某个权限 数据压缩:位运算可以用来压缩数据,例如,通过位或(|)和位与(&)运算可以高效地合并和提取数据位 网络编程:在网络编程中,位运算用于处理IP地址和子网掩码,例如,通过按位与(&)运算求子网地址 加密解密:在加密算法中,位运算可以用来对数据进行加密和解密,如对密钥进行位反转、位移等操作 硬件控制:在硬件编程中,位运算用于直接控制硬件设备的状态,如设置或清除某个特定的硬件标志位 算法优化:在算法设计中,位运算可以用来优化算法的效率,例如在散列函数中使用位运算进行取模操作,以提高HashMap等数据结构的性能 状态标志:在软件设计中,位运算可以用来设置和检查状态标志,例如,使用位字段(bit fields)来表示一个整数中的多个布尔值 文件系统:在文件系统中,位运算用于设置文件的访问权限,如通过位非(~)运算符来设置文件的掩码 图形处理:在图形处理中,位运算用于图像的像素操作,如通过位异或(^)运算来实现图像的反转 嵌入式系统:在嵌入式系统中,位运算用于控制和管理内存、定时器和其他硬件资源 数据解析:在解析二进制数据时,位运算可以用于提取和修改数据的特定部分,如网络协议中的位级解析
自己在评论区总结一下吧,总结的最好的会置顶
|