【C语言】位操作符详解

       

目录

 1、按位与( & )

2、按位或( | )

3.按位异或( ^ )


 C语言中的位操作符有以下:

&
|
^
//按位与
//按位或
//按位异或

位运算符是计算两者之间的补码,然后得到的是计算后补码转化为的原码进行输出表示

注:他们的操作数必须是整数。

 1、按位与( & )

以下为简单举例:

#include<stdio.h>int main()
{int a = 3;int b = -5;int c = a | b;return 0;
}

 对于以上代码的运算,在下面进行拆分讲解。分别先列出a和b的原码,然后计算得到补码(原码取反+1)

000000000000000000000011  a原码

000000000000000000000011  a补码(正数的补码是他本身)

100000000000000000000101  b原码

111111111111111111111111010  b反码

111111111111111111111111011  b补码

 在得到二者补码后将补码进行按位与运算。即对应位置都为1才为1,有一个是0即为0,具体运算如下:

000000000000000000000011  a补码

111111111111111111111111011  b补码

000000000000000000000011  c补码

在经过从补码变为原码的过程:

111111111111111111111111101  c原码

所以a和b按位与最终得到的c二进制为111111111111111111111111101。

2、按位或( | )

举例:

#include<stdio.h>int main()
{int a = 3;int b = -5;int c = a | b;printf("%d\n",c);return 0;
}

与按位与一样,按位或同样是先计算出a和b的补码然后将补码进行计算,然后得到的补码再转换为原码才是真正c的值

000000000000000000000011  a原码

000000000000000000000011  a补码(正数的补码是他本身)

100000000000000000000101  b原码

111111111111111111111111010  b反码

111111111111111111111111101  b补码

按位或的计算方法是两个二进制序列对应位置有1则为1,得到补码然后再转化为原码

000000000000000000000011  a补码

111111111111111111111111011  b补码

111111111111111111111111011  c补码

在经过从补码变为原码的过程:(负数取反,符号位不变)

100000000000000000000101  c原码

 所以得到的按位或计算得到的值为100000000000000000000101。

运算结果显示:

3.按位异或( ^ )

依旧用实例来进行讲解

#include<stdio.h>int main()
{int a = 3;int b = -5;int c = a ^ b;printf("%d\n",c);return 0;
}

000000000000000000000011  a原码

000000000000000000000011  a补码(正数的补码是他本身)

100000000000000000000101  b原码

111111111111111111111111010  b反码

111111111111111111111111101  b补码

按位异或运算遵循的原则是,相同位为0,相异位为1,详细运算如下:

000000000000000000000011  a补码

111111111111111111111111011  b补码

111111111111111111111111000  c补码

在经过从补码变为原码的过程:(负数取反,符号位不变)

100000000000000000001000  c原码

所以得到的c的原码为100000000000000000001000。

运算结果为:

 4.结语

        如有遗漏或问题请直接指出,感谢阅读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/655859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

防御保护----防火墙基本知识

一.防火墙的基本知识--------------------------------------------------------- 防火墙&#xff1a;可以想象为古代每个城市的城墙&#xff0c;用来防守敌军的攻击。墙&#xff0c;始于防&#xff0c;忠于守。从古至今&#xff0c;墙予人以安全之意。 防火墙的主要职责在于&…

ES实战回顾

1、你用的集群节点情况&#xff1f; 一个ES集群&#xff0c;18个节点&#xff0c;其中3个主节点&#xff0c;15个数据节点&#xff0c;500G左右的索引数据量&#xff0c;没有单独的协调节点&#xff0c;它的每个节点都可以充当协调功能&#xff1b; 2、你们常用的索引有哪些&a…

2.1写一个梅林dynv6插件(上)

专栏导航 序言及专栏目录 第一章 写一个梅林dynv6插件(上) ⇐ 第二章 写一个梅林dynv6插件(下) 文章目录 前言一、需求分析二、代码实现1、引入koolshare软件中心2、定义基本变量3、查询、解析函数及输出信息4、定时任务与获取前端输入三、代码分析小结前言 前面十多章已…

sklearn.preprocessing中的标准化StandardScaler与scale的区别

StandardScaler与scale 1、标准化概述2、两种标准化的区别 1、标准化概述 标准化主要用于对样本数据在不同特征维度进行伸缩变换&#xff0c;目的是使得不同度量之间的特征具有可比性&#xff0c;同时不改变原始数据的分布 一些机器学习算法对输入数据的规模和量纲非常敏感&am…

一个基于 .NET 7 + Vue.js 的前后端分离的通用后台管理系统框架 - DncZeus

前言 今天给大家推荐一个基于.NET 7 Vue.js(iview-admin) 的前后端分离的通用后台权限(页面访问、操作按钮控制)管理系统框架&#xff1a;DncZeus。 官方项目简介 DncZeus是一个基于 .NET 7 Vue.js 的前后端分离的通用后台管理系统框架。后端使用.NET 7 Entity Framework…

Mysql-事务(隔离级别,事务底层原理,MVCC)

什么是事务&#xff1f;有哪些特性&#xff1f; 事务&#xff1a;事务指的是逻辑上的一组操作&#xff0c;组成这组操作的各个单元要么全都成功&#xff0c;要么全都失败。 事务特性&#xff1a; 原子性&#xff08;Atomicity&#xff09;&#xff1a; 原子性是指事务是一个不…

设计模式——2_0 职责链(Chain of Responsibility)

楼下一个男人并得要死&#xff0c;那家隔壁的一家唱着留声机&#xff0c;对面是弄孩子。楼上有两人狂笑&#xff1b;还有打牌声&#xff0c;河中的船上有女人哭她死去的母亲。人类的悲欢并不相通&#xff0c;我只觉得他们吵闹 ——鲁迅 文章目录 定义图纸一个例子&#xff1a;如…

谷歌人工智能视频生成器-LUMIERE(未开源)

Google重磅发布视频生成模型Lumiere 据说后续会开源 亮点1.支持文本到视频与图像到视频 亮点2.画风迁移 亮点3.运动蒙版 亮点4.视频编辑 亮点5.视频修复 谷歌视频模型可以生成80帧的片段&#xff01;不仅画质好、质量高&#xff0c;而且时长更长。 视频局部编辑 这项功能可以…

Qt-tr-多语言支持-QColorDialog-翻译中文文本

文章目录 一.添加资源文件二.编辑ts文件三.总结一.添加资源文件 在Visual Studio中使用Qt开发时,如果你想要为QColorDialog或任何其他Qt界面元素显示中文,你需要加载对应的中文翻译文件qt_zh_CN.qm。以下是实现这一目标的步骤: 获取并编译翻译文件: Qt自带了多种语言的翻译…

PiflowX组件-FileRead

FileRead组件 组件说明 从文件系统读取。 计算引擎 flink 组件分组 file 端口 Inport&#xff1a;默认端口 outport&#xff1a;默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子pathpath“”无是文件路径。hdfs://server1:8020/flink/test/text.txtfor…

强化学习原理python篇06(拓展)——DQN拓展

强化学习原理python篇06&#xff08;拓展&#xff09;——DQN拓展 n-steps代码结果 Double-DQN代码结果 Dueling-DQN代码结果 Ref 拓展篇参考赵世钰老师的教材和Maxim Lapan 深度学习强化学习实践&#xff08;第二版&#xff09;&#xff0c;请各位结合阅读&#xff0c;本合集只…

【学习笔记】vue3的watch

尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 课程 P152节 笔记&#xff1a; 情况一&#xff1a;监视ref所定义的一个响应式数据 情况二&#xff1a;监视ref所定义的多个响应式数据 这两种情况比较简单&#xff0c;正常写就ok&#xff1a; 情况三&#xff1a;监视reactive所…

LeetCode 2808.使循环数组所有元素相等的最少秒数

【LetMeFly】2808.使循环数组所有元素相等的最少秒数 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-seconds-to-equalize-a-circular-array/ 给你一个下标从 0 开始长度为 n 的数组 nums 。 每一秒&#xff0c;你可以对数组执行以下操作&#xff1a; 对于…

把 matlab 公式输出成 latex 公式形式

问题 latex 进行符号计算后&#xff0c;想直接把 matlab 中变量代表的公式结果输出成 latex 形式。 这样可以直接 复制到 latex 中&#xff0c;不需要手打公式了。 方法 matlab 函数 latex 可以实现上述功能&#xff0c;但最好是 使用 simpify(expand(~)) 进行化简 str_Jac…

关机恶搞小程序

1. system("shutdown")的介绍 当system函数的参数是"shutdown"时&#xff0c;它将会执行系统的关机命令。 具体来说&#xff0c;system("shutdown")的功能是向操作系统发送一个关机信号&#xff0c;请求关闭计算机。这将触发操作系统执行一系列…

MacOS安装反编译工具JD-GUI以及解决无法打开的问题

目录 一.下载地址 二.安装 三.问题 四.解决办法 1.显示包内容 2.找到Contents/MacOS/universalJavaApplicationStub.sh 3.修改sh文件 4.保存后再次打开即可 一.下载地址 Java Decompiler 二.安装 将下载下来的 jd-gui-osx-1.6.6.tar 解压&#xff0c;然后将 JD-GUI.a…

Hadoop3.x基础(1)

来源&#xff1a;B站尚硅谷 这里写目录标题 大数据概论大数据概念大数据特点(4V)大数据应用场景 Hadoop概述Hadoop是什么Hadoop发展历史&#xff08;了解&#xff09;Hadoop三大发行版本&#xff08;了解&#xff09;Hadoop优势&#xff08;4高&#xff09;Hadoop组成&#xf…

IntelliJ创建一个springboot工程

安装jdk mac教程 windows教程 安装maven mac教程 windows教程 建议&#xff1a; 在本地磁盘新建一个文件夹叫maven&#xff0c;然后把下载的maven安装到这里。在后续的IntelliJ操作中&#xff0c;配置maven的settings.xml和repository地址为这个目录下的地址。 创建sprin…

【架构】Docker实现集群主从缩容【案例4/4】

实现集群主从缩容【4/4】 接上一节&#xff0c;在当前机器为4主4从的架构上&#xff0c;减缩容量为3主3从架构。即实现删除6387和6388. 示意图如下&#xff1a; 第一步&#xff1a;查看集群情况&#xff08;第一次&#xff09; redis-cli --cluster check 127.0.0.1:6387roo…

四:C语言-条件分支语句

四&#xff1a;条件分支语句 C语言是结构化的程序设计语言&#xff0c;这里的结构指的是顺序结构、选择结构、循环结构。 我们可以使用if、switch实现分支结构&#xff1b;使用for、while、do while实现循环结构 1.if语句&#xff1a; 语法格式&#xff1a; if(表达式)代码块…