开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 370|回复: 6
收起左侧

[图文资料] 【知识速递】位与+位或+位取反+位异或 +十进制转换为二进制

[复制链接]
发表于 2024-4-16 02:31:41 | 显示全部楼层 |阅读模式   福建省厦门市
本帖最后由 真IKUN 于 2024-4-17 02:20 编辑

软件在附件,注释更详尽
比特位
比特位可以理解为转换成二进制之后每一位数,bit中文名称是位,音译“比特”,是用以描述电脑数据量的最小单位。


单个字符占一个字节通常是指字符的编码方式(即在ASCII编码中的字符表示),而整数占四个字节是指整数数据类型在计算机中的存储方式。这两个概念是不同的
在计算机中,整数是一个基本的数据类型,用于存储数值。整数的存储大小(即占用的字节数)取决于编程语言和计算机架构。在易语言里,整数(尤其是32位整数)通常占用4个字节。
即1整数=4字节=32bit


十进制转换为二进制(在线进制转换器 | 菜鸟工具 (jyshare.com)https://www.jyshare.com/front-end/58/
  
子程序名返回值类型公开备 注
十转二文本型 十进制转换为二进制 这个子程序单纯的为了讲清楚进制转换的逻辑 而且位与和位或用这个更直观  ’想要严谨版,请看下面的进制_十到二
参数名类 型参考可空数组备 注
数据文本型欲转换为2进制的10进制数字文本
变量名类 型静态数组备 注
i整数型余数
number整数型 
text文本型 
如果真 (数据 = “0”)  ' 因为下面把0当进入循环的条件,如果这里是0的话,则循环不进行,直接返回空,所以这里判断,如果是0,返回文本0即可
返回 (“0”)
如果真 (数据 ≈ “-”)  ' 当比较文本在被比较文本的首部被包容时返回真,否则返回假,运算符号为“?=”或“≈”。本命令为初级命令。
返回 (“不支持当前格式”)  ' 要写的话 取绝对值,比特位取反,补码(详见https://blog.csdn.net/weixin_44540543/article/details/108356180)
number = 到整数 (数据)‘转换数据类型 ' 十进制如何转换二进制呢   这里我们拿65举例
' 除数   被除数    结果   余数   当前
' 2          65         32     1           1
' 2          32         16     0          01
' 2          16          8      0        001
' 2           8          4      0       0001
' 2           4          2      0      00001
' 2           2          1      0     000001
' 2           1          0      1    1000001
' 从下向上排列 所以十进制65对应二进制1000001
' 现在我们根据这个思路来写代码
判断循环首 (number ≠ 0)  ' 当number<2时。相除的结果为0
i = number % 2  ' %的意思是取余数
number = number ÷ 2  ' 除二取余,倒序排列
text = 到文本 (i) + text  ' 注意余数在前哦
判断循环尾 ()
' 计次循环首 (32 - 取文本长度 (text), )‘这个返回的是32为的
' text = “0” + 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)来表示一个整数中的多个布尔值
  • 文件系统:在文件系统中,位运算用于设置文件的访问权限,如通过位非(~)运算符来设置文件的掩码
  • 图形处理:在图形处理中,位运算用于图像的像素操作,如通过位异或(^)运算来实现图像的反转
  • 嵌入式系统:在嵌入式系统中,位运算用于控制和管理内存、定时器和其他硬件资源
  • 数据解析:在解析二进制数据时,位运算可以用于提取和修改数据的特定部分,如网络协议中的位级解析


自己在评论区总结一下吧,总结的最好的会置顶











进制转换(十到二) 位或 位与 位取反 位异或.e

23.12 KB, 下载次数: 2, 下载积分: 精币 -2 枚

软件截图.png

评分

参与人数 1好评 +1 精币 +1 收起 理由
大漠小鸟 + 1 + 1 感谢分享,很给力!~

查看全部评分


签到天数: 30 天

 楼主| 发表于 2024-4-17 01:45:09 | 显示全部楼层   福建省厦门市
剧终0616 发表于 2024-4-16 10:35
能说下位运算的应用场景么!~

优化性能:位运算通常比等效的算术运算更快,因为它们直接在二进制位上操作,不需要进行复杂的计算。这在处理大量数据或进行底层系统编程时尤为重要。

权限控制:在操作系统和程序中,位运算常用于实现权限管理系统。每个权限可以对应一个位,通过位运算来判断用户是否具有某个权限。

数据压缩:位运算可以用来压缩数据,例如,通过位或和位与运算可以高效地合并和提取数据位。

网络编程:在网络编程中,位运算用于处理IP地址和子网掩码,例如,通过按位与运算求子网地址。

加密解密:在加密算法中,位运算可以用来对数据进行加密和解密,如对密钥进行位反转、位移等操作。

硬件控制:在硬件编程中,位运算用于直接控制硬件设备的状态,如设置或清除某个特定的硬件标志位。

算法优化:在算法设计中,位运算可以用来优化算法的效率,例如在散列函数中使用位运算进行取模操作,以提高HashMap等数据结构的性能。

状态标志:在软件设计中,位运算可以用来设置和检查状态标志,例如,使用位字段(bit fields)来表示一个整数中的多个布尔值。

文件系统:在文件系统中,位运算用于设置文件的访问权限,如通过位非(~)运算符来设置文件的掩码。

图形处理:在图形处理中,位运算用于图像的像素操作,如通过位异或运算来实现图像的反转。

嵌入式系统:在嵌入式系统中,位运算用于控制和管理内存、定时器和其他硬件资源。

数据解析:在解析二进制数据时,位运算可以用于提取和修改数据的特定部分,如网络协议中的位级解析。

回复 支持 反对

使用道具 举报

结帖率:67% (2/3)

签到天数: 3 天

发表于 2024-4-17 00:51:19 | 显示全部楼层   湖南省郴州市
学习 加精币
回复 支持 反对

使用道具 举报

结帖率:67% (2/3)

签到天数: 3 天

发表于 2024-4-17 00:50:08 | 显示全部楼层   湖南省郴州市
学习 加精币
回复 支持 反对

使用道具 举报

签到天数: 30 天

 楼主| 发表于 2024-4-16 20:00:11 | 显示全部楼层   福建省厦门市
b0y 发表于 2024-4-16 07:06
1中文字符=2字节  
1英文字符=1字节

易友,很棒的问题,昨晚太困了没仔细看,确实有很多疏漏
在这里统一解释一下
单个字符占一个字节通常是指字符的编码方式(即在ASCII编码中的字符表示),而整数占四个字节是指整数数据类型在计算机中的存储方式。这两个概念是不同的
在计算机中,整数是一个基本的数据类型,用于存储数值。整数的存储大小(即占用的字节数)取决于编程语言和计算机架构。在许多现代编程语言和系统中,整数(尤其是32位整数)通常占用4个字节。
不知可否明了?
回复 支持 反对

使用道具 举报

结帖率:91% (192/212)

签到天数: 30 天

发表于 2024-4-16 10:35:36 | 显示全部楼层   福建省漳州市
能说下位运算的应用场景么!~
回复 支持 反对

使用道具 举报

结帖率:100% (20/20)

签到天数: 29 天

发表于 2024-4-16 07:06:36 | 显示全部楼层   浙江省杭州市
1中文字符=2字节  
1英文字符=1字节

不是这样的吗...
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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