【C语言】位与移位操作符详解

目录

1.⼆进制和进制转换

①十进制:生活中最常用

②二进制:计算机中使用的,每个数字称为一个比特

③八进制、十六进制也如上

④二进制转十进制

⑤十进制转二进制

⑥二进制转八进制

⑦二进制转十六进制

2.原码、反码、补码

3.移位操作符(对于数值的二进制操作)

①左移操作符<<

②右移操作符>>

4.位操作符:&、|、^、~

①按位与&

②按位或|

③按位异或^

 ④按位取反~

5.结语



对于C语言中位操作符的介绍首先我们要先了解一些预备知识

1.⼆进制和进制转换

    其实2进制、8进制、10进制、16进制是数值的不同表⽰形式⽽已。

   例如:

   数值15的各种进制的表⽰形式:

二进制1111
八进制17
十进制15
十六进制F

①十进制:生活中最常用

(1)逢十进一

(2)数字每一位由0~9中的数字组成

②二进制:计算机中使用的,每个数字称为一个比特

(1)逢进一

(2)数字每一位由0~1中的数字组成

③八进制、十六进制也如上

④二进制转十进制

其实各种进制的每一位都是有相对应的权重的,例如十进制中123为什么是这个值呢?

10进制的位123
权重10^{2}10^{1}10^{0}
求值1 * 100   +    2 * 10      +3 * 1      =     123

我们可以看到十进制从右往左个、十、百...位权重依次是10^{0}10^{1}10^{2}...

2进制和10进制是类似的,只不过2进制的每⼀位的权重,从右向左是: 2^{0}2^{1}2^{2}...
例如:
二进制的位110
权重2^{2}2^{1}2^{0}
求值1 * 4       +       1 * 2       +       0 * 1        =       6    

⑤十进制转二进制

⑥二进制转八进制

8进制的数字每⼀位是 0~7 的,0~7的数字,各⾃写成2进制,最多有 3个2进制位 就⾜够了,比如7的二进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算一个8进制位,剩余不够3个2进制位的直接换算。

 例如:

 

⑦二进制转十六进制

16进制的数字每⼀位是 0~9,a ~f 的,0~9,a ~f的数字,各⾃写成2进制,最多有4个2进制位就⾜够了,⽐如 f 的⼆进制是1111,所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进制位会换算⼀个16进制位,剩余不够4个⼆进制位的直接换算。
如:2进制的01101011,换成16进制: 0x6b ,16进制表示的时候前⾯加0x

2.原码、反码、补码

①整数的二进制表示方法有三种:原码、反码、补码
②有符号整数三种表示方式均有 符号位数值位两部分,在二进制序列中 最高的一位是符号位,其余的是数值位;
③符号位的0表示“ ”,1表示“ ”;

原码:直接将数据翻译成二进制的形式就可以

   例:10 翻译成二进制就是 1010 再根据数据开辟的内存空间补充0或1就可(正数符号位        即第一位补0负数符号位补1,其余都补0)

     int 10就是开辟了4个字节有32个比特位即00000000 00000000 00000000 00001010为         二进制表示

      int -10的二进制原码即为10000000 00000000 00000000 00001010

反码:将原码的符号位不变其余按位取反

   例:int -10反码:11111111 111111111 11111111 11110101

补码:反码+1即可

    例:int -10补码:11111111 11111111 11111111 11110110

注意:1.正数的原码、反码、补码相同

           2.对于整型来说:数据在内存中存放的是补码

存放补码的原因在于:

在计算机系统中,数值⼀律⽤补码来表⽰和存储。原因在于,使⽤补码,可以将符号位和数值域统处理;同时,加法和减法也可以统⼀处理(CPU只有加法器)此外,补码与原码相互转换,其运算 过程是相同的,不需要额外的硬件电路.

3.移位操作符(对于数值的二进制操作)

<< 左移操作符
>> 右移操作符
注: 移位操作符的操作数只能是 整数

①左移操作符<<

规则:左边抛弃,右边补零

②右移操作符>>

规则:

⾸先右移运算分两种:

1. 逻辑 右移:左边⽤0填充,右边丢弃
2. 算术 右移:左边⽤原该值的符号位填充,右边丢弃
注: 对于移位运算符,不要移动负数位,这个是标准未定义的。
例如:
int num = 10;
num>>-1;//error

4.位操作符:&、|、^、~

&        //按位与    将两操作数二进制每一位对比同时为1时结果为1,否则为0
|        //按位或    同时为0时为0,其余为1
^        //按位异或  相同为0,否则为1
~        //按位取反  同反码的运算

:它们的操作数必须是整数负数用二进制的补码进行运算

例如:

#include <stdio.h>
int main()
{int num1 = -3;int num2 = 5;printf("按位与&:%d\n", num1 & num2);printf("按位或|:%d\n", num1 | num2);printf("按位异或^:%d\n", num1 ^ num2);printf("按位取反~:%d\n", ~0);return 0;
}

结果如下:

①按位与&

-3取其补码

按位与同数学中的逻辑运算与,同真才为真(两个都是1才为1),其余为假(0);

②按位或|

按位或类似于数学中逻辑与算符或:

只要有一个真则为真其余为假(只要有一个1则为1,其余为0)

 

③按位异或^

相异为真(01则为1,其余为0)

 

 ④按位取反~

取相反值就行

5.结语

位与移位操作符是c语言学习中的一个难点,其关键在于对于二进制的了解与使用,熟悉各种操作符的使用规则,以上就是今天学习的内容啦~

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

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

相关文章

【已更新】2024美赛C题代码教学思路数据处理数学建模分析Momentum in Tennis

问题一完整的代码已给出&#xff0c;预计2号晚上或者3号凌晨全部给出。 代码逻辑如下&#xff1a; C题第一问要求我们开发一个模型&#xff0c;捕捉得分时的比赛流程&#xff0c;并将其应用于一场或多场比赛。你的模型应该确定哪名球员在比赛的特定时间表现得更好&#xff0c;…

AI-数学-高中-24-三角函数一般形式的各参数含义

原作者视频&#xff1a;三角函数】12三角函数一般形式的各参数含义&#xff08;易&#xff09;_哔哩哔哩_bilibili 1.函数中的A标识符&#xff1a;表示曲线中间平衡位置的振幅&#xff0c;值域为正负A&#xff1a;[-A,A]。 2.函数中的B标识符&#xff1a;决定曲线纵向上下平移…

基于 SpringBoot 和 Vue.js 的权限管理系统部署教程

大家后&#xff0c;我是 jonssonyan 在上一篇文章我介绍了我的新项目——基于 SpringBoot 和 Vue.js 的权限管理系统&#xff0c;本文主要介绍该系统的部署 部署教程 这里使用 Docker 进行部署&#xff0c;Docker 基于容器技术&#xff0c;它可以占用更少的资源&#xff0c;…

linux文件的IO函数

open函数: 作用&#xff1a;打开或者新建一个文件 原型&#xff1a; int open(const char*pathname,int flags); int open(const char*pathname,int flags,mode_t mode); 参数&#xff1a; pathname:路径 flags:1-> O_RONLY 只读打开 2 -> O_WONLY只写打开 3->…

83 CTF夺旗-Python考点SSTI反序列化字符串

这里写目录标题 CTF各大题型简介演示案例:CTF夺旗-Python-支付逻辑&JWT&反序列化CTF夺旗-Python-Flask&jinja2&SSTl模版注入CTF夺旗-Python-格式化字符串漏洞&读取对象 涉及资源&#xff1a; 我们这篇文章主要讲的是CTF在web渗透测试方向的3个考点 CTF各大…

elementui常用组件-个人版(间断更新)

Dialog 对话框 el-dialog <el-dialogtitle"提示":visible.sync"dialogVisible"width"30%":before-close"handleClose"><span>这是一段信息</span><span slot"footer" class"dialog-footer"…

微信小程序(三十六)事件传参

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.传参步骤 2.传参接收解构步骤 源码&#xff1a; index.wxml <button type"primary" bind:tap"onclick" mark:index"{{0}}" mark:remb"{{1}}" class"But&quo…

产品经理--分享在项目中产品与研发之间会遇到的问题 在面试这一岗位时,面试官常问的问题之一,且分享两大原则来回答面试官这一问题

目录 一.STAR原则 1.1 简介 1.2 如何使用 1.3 举例说明 二.PDCA原则 2.1 简介 2.2 如何使用 2.3 运用场景 2.4 举例说明 三.产品与研发的沟通痛点 3.1 沟通痛点的原因 3.2 分享案例 前言 本篇会详细阐明作为一个产品经理会在项目遇到的问题&#xff0c;如&#xff1a;产…

张艺谋《主角》选角引发热议,周迅、赵丽颖、杨紫或成候选。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 近日&#xff0c;张艺谋执导的首部电视剧《主角》女主选角成为…

6.electron之上下文隔离,预加载JS脚本

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中&#xff0c;因此它允许你仅需一个代码仓库&#xff0c;就可以撰写支持 Windows、…

【Linux】vim的基本操作与配置(上)

Hello everybody!今天我们要进入vim的讲解了。学会了vim,咱们就可以在Linux系统上做一些简单的编程啦&#xff01; 那么废话不多说&#xff0c;咱们直接进入正题&#xff01; 1.初识vim vim是一款多模式的文本编辑器&#xff0c;可以对一个文件进行编辑操作。 它一共有三个模…

2024年【化工自动化控制仪表】最新解析及化工自动化控制仪表考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【化工自动化控制仪表】最新解析及化工自动化控制仪表考试资料&#xff0c;包含化工自动化控制仪表最新解析答案和解析及化工自动化控制仪表考试资料练习。安全生产模拟考试一点通结合国家化工自动化控制仪表考…

《dx12 龙书》第四部分学习笔记——预备知识(下)

7、多重采样技术的原理 由于屏幕中显示的像素不可能是无穷小的&#xff0c;所以并不是任意一条直线都能在显示器上“平滑”而完美地呈现出来。即为以像素矩阵 &#xff08;matrix of pixels&#xff0c; 可以理解为“像素2D数组”&#xff09;逼近直线的方法所产生的“阶梯” &…

EDM营销平台哪个好?推荐的邮件营销平台?

EDM邮件营销平台有哪些&#xff1f;外贸EDM邮件营销平台有哪些&#xff1f; EDM营销平台已成为企业推广产品和服务的重要工具。但是&#xff0c;面对市场上众多的EDM营销平台&#xff0c;究竟哪个更好呢&#xff1f;下面&#xff0c;蜂邮EDM将从平台功能、用户体验、数据分析和…

Matlab使用点云工具箱进行点云配准

一、代码 source_pc pcread(bun_zipper.ply); target_pc pcread(bun_zipper2.ply); % 下采样 gridStep 0.001; ptCloudA pcdownsample(source_pc,gridAverage,gridStep); ptCloudB pcdownsample(target_pc,gridAverage,gridStep); % 初始变换矩阵 tform_initial affine3…

C语言笔试题之实现C库函数 pow()(递归的思想)

实例要求&#xff1a; 1、请你实现C库函数 pow()&#xff08;stdio.h & math.h&#xff09; &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即x^n &#xff09;&#xff1b;2、函数声明&#xff1a;double myPow(double x, int n)&#xff1b;参数&#xff1a;1、x …

YOLOv8改进 更换轻量级网络结构

一、GhostNet论文 论文地址:1911.11907.pdf (arxiv.org) 二、 GhostNet结构 GhostNet是一种高效的目标检测网络,具有较低的计算复杂度和较高的准确性。该网络采用了轻量级的架构,可以在计算资源有限的设备上运行,并能够快速地实时检测图像中的目标物体。 GhostNet基于Mo…

AI大模型开发架构设计(9)——AI 编程架构刨析和业务应用实战案例

文章目录 AI 编程架构刨析和业务应用实战案例1 AI编程代码生成模型剖析编程方式的发展代码自动生成基于大模型的AI编程工具——Github Copilot以 CodeGeeX 为例-发展过程以 CodeGeeX 为例-训练过程以 CodeGeeX 为例-大规模代码数据处理以 CodeGeeX 为例-模型结构以 CodeGeeX 为…

[设计模式Java实现附plantuml源码~行为型]请求的链式处理——职责链模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

JWT令牌 | 一个区别于cookie/session的更安全的校验技术

目录 1、简介 2、组成成分 3、应用场景 4、生成和校验 5、登录下发令牌 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应用开发、数据结构和算法&#xff0c;初步涉猎Pyth…