【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.rhkb.cn/news/253456.html

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

相关文章

6个好看的wordpress模板

简站wordpress服务业通用主题 2023年立秋纪念版&#xff0c;简站wordpress服务行业通用主题&#xff0c;适合服务行业企业官网使用。 https://www.jianzhanpress.com/?p5393 小语种翻译wordpress主题 小语种国家外贸网站建设需要的wordpress主题模板&#xff0c;适合做小语…

Oracle 面试题 | 09.精选Oracle高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Hadoop3.x基础(4)- Yarn

来源&#xff1a;B站尚硅谷 目录 Yarn资源调度器Yarn基础架构Yarn工作机制作业提交全过程Yarn调度器和调度算法先进先出调度器&#xff08;FIFO&#xff09;容量调度器&#xff08;Capacity Scheduler&#xff09;公平调度器&#xff08;Fair Scheduler&#xff09; Yarn常用命…

网络连接受限或无连接怎么办?这里提供几个修复办法

本文介绍了如何完成疑难解答步骤,以解决在Windows 10、Windows 8和Windows 7中尝试在Windows计算机上设置或建立网络连接时可能遇到的连接问题错误。 可能错误提示 连接受限或无连接:连接具有有限的连接或无连接。你可能无法访问Internet或某些网络资源。 连接受限。 排除和解…

PHP实现DESede/ECB/PKCS5Padding加密算法兼容Java SHA1PRNG

这里写自定义目录标题 背景JAVA代码解决思路PHP解密 背景 公司PHP开发对接一个Java项目接口&#xff0c;接口返回数据有用DESede/ECB/PKCS5Padding加密&#xff0c;并且key也使用了SHA1PRNG加密了&#xff0c;网上找了各种办法都不能解密&#xff0c;耗了一两天的时间&#xf…

Leetcode3020. 子集中元素的最大数量

Every day a Leetcode 题目来源&#xff1a;3020. 子集中元素的最大数量 解法1&#xff1a;哈希 枚举 用一个哈希表统计数组 nums 中的元素及其出现次数。 暴力枚举数组中的数&#xff0c;作为 x&#xff0c;然后不断看 x2,x4,⋯ 在数组中的个数。直到个数不足 2 个为止&a…

RabbitMQ-3.发送者的可靠性

发送者的可靠性 3.发送者的可靠性3.1.生产者重试机制3.2.生产者确认机制3.3.实现生产者确认3.3.1.开启生产者确认3.3.2.定义ReturnCallback3.3.3.定义ConfirmCallback 3.发送者的可靠性 首先&#xff0c;我们一起分析一下消息丢失的可能性有哪些。 消息从发送者发送消息&#…

B站UP主实时信息获取展示php源码

B站UP主实时数据展示系统 - PHP源码分享 想要实时追踪你心仪的B站UP主的最新动态吗&#xff1f;现在&#xff0c;你可以轻松获取并展示B站UP主的实时数据&#xff0c;包括粉丝数、作品数、头像、播放量等关键信息。 功能亮点&#xff1a; 实时更新&#xff1a;系统通过B站AP…

拿捏循环链表

目录&#xff1a; 一&#xff1a;单链表&#xff08;不带头单向不循环&#xff09;与循环链表&#xff08;带头双向循环&#xff09;区别 二&#xff1a;循环链表初始化 三&#xff1a;循环链表头插 四&#xff1a;循环链表尾插 五&#xff1a;循环链表头删 六&#xff1…

如何保持mac苹果电脑系统在最佳状态?不卡顿

苹果电脑一直以其卓越的性能和用户友好的操作系统而备受欢迎。然而电脑上的文件、应用程序和缓存可能会逐渐积累&#xff0c;导致性能下降。为了确保你的苹果电脑保持最佳状态&#xff0c;高效清理是至关重要的一步。在本文中&#xff0c;我们将分享一些如何清理苹果电脑更高效…

Sping Cloud Hystrix 参数配置、简单使用、DashBoard

Sping Cloud Hystrix 文章目录 Sping Cloud Hystrix一、Hystrix 服务降级二、Hystrix使用示例三、OpenFeign Hystrix四、Hystrix参数HystrixCommand.Setter核心参数Command PropertiesFallback降级配置Circuit Breaker 熔断器配置Metrix 健康统计配置Request Context 相关参数C…

基于spring boot实现邮箱发送和邮箱验证

目录 一、邮箱发送实现1. 开通邮箱服务2. 添加邮箱依赖3.添加配置4.添加邮箱通用类5. 测试类 二、邮箱验证实现1.添加依赖2. 添加配置3.添加controller4. 测试 项目地址: https://gitee.com/nssnail/springboot-email 一、邮箱发送实现 1. 开通邮箱服务 使用qq邮箱、163邮箱都…

[UI5 常用控件] 06.Splitter,ResponsiveSplitter

文章目录 前言1. Splitter1.1 属性 2. ResponsiveSplitter 前言 本章节记录常用控件Splitter,ResponsiveSplitter。主要功能是分割画面布局。 其路径分别是&#xff1a; sap.ui.layout.Splittersap.ui.layout.ResponsiveSplitter 1. Splitter 1.1 属性 orientation &#x…

【力扣】快乐数,哈希集合+快慢指针+数学

快乐数原题地址 方法一&#xff1a;哈希集合 定义函数getNext(n)&#xff0c;返回n的所有位的平方和。一直执行ngetNext(n)&#xff0c;最终只有2种可能&#xff1a; n停留在1。无限循环且不为1。 证明&#xff1a;情况1是存在的&#xff0c;如力扣的示例一&#xff1a; 接…

正点原子--STM32基本定时器学习笔记(1)

目录 1. 定时器概述 1.1 软件定时原理 1.2 定时器定时原理 1.3 定时器分类 1.4 定时器特性表 1.5 基本、通用、高级定时器的功能整体区别 2. 基本定时器简介 3. 基本定时器框图 时钟树分析 这部分是笔者对基本定时器的理论知识进行学习与总结&#xff01;主要记录学习…

【PyTorch][chapter 15][李宏毅深度学习][Neighbor Embedding-LLE]

前言&#xff1a; 前面讲的都是线性降维&#xff0c;本篇主要讨论一下非线性降维. 流形学习&#xff08;mainfold learning&#xff09;是一类借鉴了拓扑流行概念的降维方法. 如上图,欧式距离上面 A 点跟C点更近&#xff0c;距离B 点较远 但是从图形拓扑结构来看&#xff0c; …

算法学习——华为机考题库10(HJ64 - HJ69)

算法学习——华为机考题库10&#xff08;HJ64 - HJ69&#xff09; HJ64 MP3光标位置 描述 MP3 Player因为屏幕较小&#xff0c;显示歌曲列表的时候每屏只能显示几首歌曲&#xff0c;用户要通过上下键才能浏览所有的歌曲。为了简化处理&#xff0c;假设每屏只能显示4首歌曲&a…

C#,字符串相似度的莱文斯坦距离(Levenshtein Distance)算法与源代码

一、莱文斯坦&#xff08;Levenshtein&#xff09; Vladimir I. Levenshtein 弗拉基米尔I列文施坦博士是纠错码理论的先驱&#xff0c;被称为俄罗斯编码理论之父。Levenshtein是莫斯科俄罗斯科学院Keldysh应用数学研究所的研究教授&#xff0c;他的贡献体现在消费者的日常生活中…

蓝桥杯刷题day08——完全日期

1、题目描述 如果一个日期中年月日的各位数字之和是完全平方数&#xff0c;则称为一个完全日期。 例如&#xff1a;2021年6月5日的各位数字之和为20216516&#xff0c;而16是一个完全平方数&#xff0c;它是4的平方。所以2021年6月5日是一个完全日期。 请问&#xff0c;从200…

vue对于安装依赖时不好习惯的反省

因为一个不好的习惯&#xff0c;我总是喜欢–save去安装依赖包&#xff0c;然后发现最后打包后的内容总是很大。就想着怎么能让包小一些&#xff0c;就发现我遗漏了vue安装依赖的一个小知识点 安装依赖的时候可以-s -d -g去安装&#xff0c;要根据使用的内容选择去安装&#xf…