C语言位运算

目录

        1.C语言位运算符表

        2.C语言移位运算符详解(配实例作业) 

        3.C语言&按位与运算符详解 

        4.C语言|按位或运算符详解

        5.C语言^按位异或运算符详解

        6.C语言~取反运算符详解 


C语言位运算这一章主要介绍C语言位运算符表、C语言移位运算符、C语言&按位与运算符、C语言|按位或运算符、C语言^按位异或运算符以及C语言~取反运算符。与其他运算符不同,C语言中位运算,顾名思义,是以数值的二进制位为单位进行操作的,包含<<(左移)、>>(右移)、~(按位取反)、&(按位与)、|(按位或)、^(按位异或)共六种运算符。在本章末尾,给大家做了C语言结课设计安排。

1.C语言位运算符表

与其他运算符不同,C语言中位运算,顾名思义,是以数值的二进制位为单位进行操作的,包含<<左移)、>>右移)、~按位取反)、&按位与)、|按位或)、^按位异或)共六种运算符。

功能如下:

左移运算符<<向左(即高位)移位,右侧补0
右移运算符>>向右(即低位)移位,左侧补0
按位取反~如名,即0变1,1变0
按位与&相对应的两个位都为1则为1,反之为0
按位或|相对应的两个位至少有一个为1即为1,反之为0
按位异或^相对应的两个位相同为0,相异(不同)为1

2.C语言移位运算符详解(配实例作业) 

<<>>运算符,通过箭头方向可以很好的辨别,分别是C语言位运算符中的左移运算符右移运算符,如表达式13<<2,它的运算过程为:13的用二进制(四个字节,不考虑符号)表示为,0000 0000 0000 0000 0000 0000 0000 1101,那么向左移两位,右侧补0,则变为0000 0000 0000 0000 0000 0000 0011 0100 换成十进制即变为52,大家可以自行验证。

同理,再举一个例子,如表达式25>>3,表示25的二进制位向右移三位,由0000 0000 0000 0000 0000 0000 0001 1001变为0000 0000 0000 0000 0000 0000 0000 0011,即十进制3。

大家可以自行计算验证,也可以用过代码实现如下:

#include<stdio.h>
int main()
{int a,b;a=13<<2;b=25>>3;printf("a=%d,b=%d\n",a,b);return 0;
}

运行结果如下:

a=52,b=3

移位运算符的作用:

1. 左移N位的本质是乘以2的N次方。

2. 右移N位的本质是除以2的N次方。

题目描述:

读入一个10进制正整数,将其进行二进制表示,取其从右端开始的第4至7位(别忘记是从0开始数的),输出这一部分的10进制表示。

c 语言实现代码 

#include <stdio.h>int main()
{int n;scanf("%d", &n);printf("%d\n", (n >> 4) & 15);return 0;
}

更多相关例题可以私聊我

3.C语言&按位与运算符详解 

按位与运算符&,有点和前面学过的逻辑与(&&)运算符类似,只有一个&,都是同为1则为1。不同的是按位相互运算。如3&5,运算过程如下:

3 0000 0000  0000 0000  0000 0000  0000 0011
5 0000 0000  0000 0000  0000 0000  0000 0101
& ------------------------------------------0000 0000  0000 0000  0000 0000  0000 0001

可以看到3&5的结果即十进制1。

大家可以尝试其他数值实验,代码如下:

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

 运行结果如下:

a=1

按位与运算符的作用:

1. 清零:

我们可以对某一个数与0进行按位与运算,由于两个位都为1才为1,因此最终全部位都变为0,起到清零的作用

2. 取指定位:

如某些存储场景下,“第1~3位表示xxxx“”,我们需要取出1~3位,则可以让原数值与数字7进行按位与运算,得到的结果即是原数值的1~3位的值。

3. 判断奇偶:

可以发现,数字的奇偶取决于二进制位的最低一位是1还是0,因此只需要与1按位与运算,判断是1是0即可得知奇偶。

4.C语言|按位或运算符详解

按位或运算符|,同样,它也与我们前面学过的逻辑或运算符类似,只有一个竖线表示,作用位,两个对应的二进制位有一个为1结果即为1。如8|7的运算过程可以如下表示:

8 0000 0000  0000 0000  0000 0000  0000 1000
7 0000 0000  0000 0000  0000 0000  0000 0111
& ------------------------------------------0000 0000  0000 0000  0000 0000  0000 1111

可以看到最终的二进制结果换算成十进制即为15(并不是单纯8+7得来的哦!) 

代码如下:

#include<stdio.h>
int main()
{int a;a=8|7;printf("a=%d\n",a);return 0;
}

运行结果如下:

a=15

按位或运算符的作用:

对一个数字的指定位置为1,如“某个数字的第七位”表示开关,原先是0,需要改为1的状态,即可以将这个数字与64按位或,即可得到第七位变为1,其余位的值依旧不变。

5.C语言^按位异或运算符详解

^表示按位异或运算符,顾名思义,相异,即不同则为1,反之为0。

例如15和16进行异或运算,运算过程如下:

15 0000 0000  0000 0000  0000 0000  0000 1111
16 0000 0000  0000 0000  0000 0000  0001 0000
^ ------------------------------------------0000 0000  0000 0000  0000 0000  0001 1111

可以看到,经过按位异或运算后,其结果变成十进制应为31,大家务必弄清楚运算过程,然后再上机验证,代码如下:

#include<stdio.h>
int main()
{int a;a=15^16;printf("a=%d\n",a);return 0;
}

运算结果如下:

a=31

异或运算符的作用:

1. 指定位数的翻转:

如想对某个数字的低4位进行翻转,则可以将这个数字与15(二进制为00001111)进行按位异或运算,既可以将原数字的低四位进行翻转,即高四位不变,低四位0变1,1变0。

2. 与0异或还是原值:

大家可以自行实验,一个数字与0进行异或,结果还是原值。

3. 交换两个数字:

除了之前我们学习交换两个数字需要第三个变量做中介之外,如今可以通过异或运算进行,代码如下:

#include<stdio.h>
int swap(int *a,int *b)
{if (*a!=*b){*a=*a^*b;*b=*b^*a;*a=*a^*b;}return 0;
}
int main()
{int a=5;int b=5;swap(&a,&b);printf("a=%d b=%d\n",a,b);return 0;
}

 可以看到原先a为3,b为5,运行后得出:

a=5 b=5

6.C语言~取反运算符详解 

~取反运算符,是对数值的二进制位进行取反,是第一个单目运算符,因为只有一个运算对象,运算过程是即0变为1,1变为0,非常好理解。

~1=0
~0=1

大家可以尝试理解下面代码:

#include<stdio.h>
int main()
{unsigned int a=1;printf("~a=%u\n",~a);return 0;
}

为了便于理解,例子代码不考虑符号位,运算结果如下

~a=4294967294

通过学习之前的知识,相信大家已经有所积累,那么下面就进入结课的环节。


结课设计(多选一):
1. 学生信息管理系统
2. 模拟35选7彩票系统
3. 24点、数独小游戏
4. 贪吃蛇游戏
5. 俄罗斯方块
之后会出相关的c语言代码示例

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

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

相关文章

【小沐学Golang】基于Go语言搭建静态文件服务器

文章目录 1、简介2、安装2.1 安装版2.2 压缩版 3、基本操作3.1 go run3.2 go build3.3 go install3.4 go env3.5 go module 4、文件服务器4.1 filebrowser4.2 gohttpserver4.3 goFile 5、FAQ5.1 go.mod 为空5.2 超时 结语 1、简介 https://golang.google.cn/ Go语言诞生于2007…

word表格跨页后自动生成的顶部横线【去除方法】

Hello World! Its been a long time. 这一年重心放在了科研、做事、追寻新的经历上&#xff0c;事有正事、琐事、幸事、哀事&#xff0c;内心与认知成长了一些&#xff0c;思想成熟了几分&#xff0c;技艺也有若干收获。不管怎样&#xff0c;来打个卡吧&#xff0c;纪念一下&…

Web前端高级工程师培训:使用 Node.js 构建一个 Web 服务端程序(3)

11、HTTP 协议 11-1、协议的定义 HTTP 是一种能够获取如 HTML 这样的网络资源的 protocol(通讯协议)。它是在 Web 上进行数据交换的基础&#xff0c;是一种 client-server 协议&#xff0c;也就是说&#xff0c;请求通常是由像浏览器这样的接受方发起的。一个完整的Web文档通…

Tailwind Starter Kit 一款极简的前端快速启动模板

Tailwind Starter Kit 是基于TailwindCSS实现的一款开源的、使用简单的极简模板扩展。会用Tailwincss就可以快速入手使用。Tailwind Starter Kit 是免费开源的。它不会在原始的TailwindCSS框架中更改或添加任何CSS。它具有多个HTML元素&#xff0c;并附带了ReactJS、Vue和Angul…

Docker安装Mysql5.7,解决无法访问DockerHub问题

Docker安装Mysql5.7&#xff0c;解决无法访问DockerHub问题 简介 Docker Hub 无法访问&#xff0c;应用安装失败&#xff0c;镜像拉取超时的解决方案。 摘要 &#xff1a; 当 Docker Hub 无法访问时&#xff0c;可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的…

使用爬虫爬取Python中文开发者社区基础教程的数据

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

微信小程序文本收起展开

这里写自定义目录标题 微信小程序文本收起展开常见问题的梯形背景框 微信小程序文本收起展开 参考 https://juejin.cn/post/6963904955262435336 <!-- 常见问题解答 --><view classcontentBottom><view classBottomFirst><text id0 data-id0 class&quo…

python + mitmproxy 爬手机app (1)

起因&#xff0c; 目的: 想爬手机上某鱼。 mitmproxy 简介: 一句话: mitmproxy 就是中间人攻击. (只不过&#xff0c; 你安装&#xff0c;就代表你愿意承担风险。)源码&#xff1a;https://github.com/mitmproxy/mitmproxy文档: https://mitmproxy.org/ 安装过程: 见聊天记…

eCAP超声波测距-ePWM电机调速

目录 eCAP超声波测距 整体框架 关键模块 实验效果 PWM电机调速 DRV8833基本介绍 整体框架 eCAP超声波测距 本实验所用的超声波HC-SR04模块如下图所示&#xff0c;左边为正面图&#xff0c;右边为反面图。 HC-SR04基本工作原理&#xff1a; &#xff08;1&#xff09;采…

spring源码中的,函数式接口,注解@FunctionalInterface

调用方 /org/springframework/beans/factory/support/AbstractBeanFactory.java:333sharedInstance getSingleton(beanName, () -> {try {return createBean(beanName, mbd, args);}catch (BeansException ex) {// Explicitly remove instance from singleton cache: It mi…

Kafka之消费者客户端

1、历史上的二个版本 与生产者客户端一样&#xff0c;在Kafka的发展过程当中&#xff0c;消费者客户端主要有两个大的版本&#xff1a; 旧消费者客户端&#xff08;Old Consumer&#xff09;&#xff1a;基于Scala语言开发的版本&#xff0c;又称为Scala消费者客户端。新消费…

rpm 命令

rpm&#xff08;Red Hat Package Manager&#xff09;是 Red Hat Linux 及其衍生发行版&#xff08;如 CentOS、Fedora&#xff09;中用于管理软件包的系统。它允许用户安装、卸载、升级、查询和验证软件包。 一、安装软件包 &#xff08;1&#xff09;安装一个 RPM 软件包&a…

高并发下如何保证接口的幂等性?

前言 接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题。本文分享了一些解决这类问题非常实用的办法,绝大部分内容我在项目中实践过的,给有需要的小伙伴一个参考。 不知道你有没有遇到过这些场景: 有时我们在填写某些form表单时,保存按钮不小心快速点了两次…

十二、【智能体】深入剖析:大模型节点的全面解读,举例说明,教你如何在扣子中嵌入代码

大模型节点 大模型节点主要分为5部分&#xff1a; 处理类型 单次批处理 模型类型&#xff1a;目前可以选择的模型有 豆包、通义千问、智谱、MinMax和Kimi输入:此时的参数可以被下面的提示词所用提示词&#xff1a;给大模型使用的提示词输出&#xff1a;经过此大模型处理后的输…

Vehicle Spy3.9如何新建工程—总览

1&#xff1a;写作目的 学习和精通SPY的使用&#xff0c;对于spy&#xff0c;目前主要是通用系用的比较多&#xff0c;本身spy的生产厂家英特佩斯也是美国的公司&#xff0c;除了软件自带教程。中文网上很少能找到相关的中文教程。 故写下这篇文章&#xff0c;帮助自己和大家…

Ubuntu(22.04)本地部署Appsmith

Ubuntu&#xff08;22.04&#xff09;安装Appsmith 简要介绍 Appsmith 是一个开源的低代码开发平台&#xff0c;旨在帮助开发者和非开发者快速构建定制化的内部应用程序和管理工具。通过直观的拖拽界面和丰富的预配置组件&#xff0c;Appsmith 让用户无需编写大量代码即可创建…

软件工程的学习之详细绪论

软件的定义 软件是程序和所有使程序正确运行所需要的相关文档和配置信息。 Software Program Data Document 一、软件危机&#xff1a; 软件开发和维护过程中遇到的一系列严重问题。 二、具体表现&#xff1a; 1、产品不符合用户的实际需要&#xff1b; 2、软件开发生产率…

Sigrity 共模电感的S-parameter仿真数据导入

下载S4P参数 https://ds.murata.co.jp/simsurfing/cmcc.html?partnumbers%5B%22DLW32MH101XT2%22%5D&oripartnumbers%5B%22DLW32MH101XT2L%22%5D&rgearjomoqke&rgearinfocom&md51729525489334# 下载S4P参数&#xff1b; DLW32MH101XT2.s4p Sigrity 使用-dif…

Mac电脑:资源库Library里找不到WebServer问题的解决

今天看到一本书里写到Windows电脑自带IIS Web服务器&#xff0c;好奇了一下下&#xff0c;mac电脑自带的又是什么服务器呢&#xff1f;经查询&#xff0c;原来是Apache服务器&#xff0c;这个名字我很熟悉。只是如何设置呢&#xff1f;我从来没用过&#xff0c;于是试验了一番。…

如何看待AI技术的应用前景?

人工智能&#xff1a;引领未来的变革力量 在当今快速变化的科技时代&#xff0c;人工智能&#xff08;AI&#xff09;作为一项前沿技术&#xff0c;已然成为推动全球各行各业变革的核心驱动力。随着人工智能技术的不断发展&#xff0c;其广泛的应用前景和深远的影响力&#xf…