逍遥自在学C语言 | 位运算符^的高级用法
前言
在上一篇文章中,我们介绍了|运算符的高级用法,本篇文章,我们将介绍^ 运算符的一些高级用法。

一、人物简介
- 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。

- 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。

二、交换两个变量的值
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
printf("交换前: a = %d, b = %d\n", a, b);
a ^= b;
b ^= a;
a ^= b;
printf("交换后: a = %d, b = %d\n", a, b);
return 0;
}

- 两个相同的数,异或结果为0
- 第一次的
a ^= b等价于a = a ^ b b ^= a此时等价于b = b ^ a ^ b,结果为b = a- 第二次的
a ^= b此时等价于a = a ^ b ^ a,结果为a = b - 这样
a和b的数值就进行了交换
三、判断两个变量的符号是否相同
#include <stdio.h>
int main()
{
int x = 10;
int y = -20;
if ((x ^ y) < 0)
{
printf("x 和 y符号相反\n");
}
else
{
printf("x 和 y符号相同\n");
}
return 0;
}

- 有符号数的最高位是符号位,0表示正数,1表示负数
- 如果两个有符号数的最高位相同,则最高位异或结果为0,反之则为1
四、将一个数的某些位翻转
#include <stdio.h>
int main()
{
unsigned int num = 12; // 0b1100
unsigned int mask = 7; // 0b0111
unsigned int result = num ^ mask; // 0b1011
printf("原始数据: %u\n", num);
printf("掩码: %u\n", mask);
printf("位翻转后: %u\n", result);
return 0;
}

num的二进制表示为1100,mask的二进制表示为0111- 从低位往高位数,num和mask第三位相同,都为
1,所以这一位的异或结果为0 - 最终的结果为
1011
五、求两个数的平均数
#include <stdio.h>
int main()
{
int a = 15; // 0b1111
int b = 5; // 0b0101
int avg = (a&b) + ((a^b)>>1);
printf(" %d 和 %d 的平均数为 %d\n", a, b, avg);
return 0;
}

a的二进制表示为1111,b的二进制表示为0101- 按位与(&)运算后得到两者相同的部分
0101 - 按位异或(^)运算后得到两者不同的部分
1010 (a ^ b)>> 1,等价于(a ^ b)/2,也就是将两者不同的部分除以2- 相同的部分,加上二分之一不同的部分,就得到两个数的平均数
小结
通过这篇文章,我们学会了用位运算符^的4种高级用法
1、交换两个变量的值
2、判断两个变量的符号是否相同
3、将一个数的某些位翻转
4、求两个数的平均数
在下一篇文章中,我们将介绍位运算符~的一些高级用法。
欢迎各位 点赞 收藏 评论,如有错误请留言指正,非常感谢!
逍遥自在学C语言 | 位运算符^的高级用法的更多相关文章
- C语言位运算符:与、或、异或、取反,左移和右移
C语言位运算符:与.或.异或.取反.左移和右移 个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. ,则该位的结果值为1,否则为0 | ...
- C语言位运算符:与、或、异或、取反、左移和右移
语言位运算符:与.或.异或.取反.左移和右移 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符 ...
- Flask - 模板语言jinja2 和render_template高级用法
目录 Flask - 模板语言jinja2 和render_template高级用法 一. 字典传递至前端 二. 列表传入前端Jinja2 模板的操作: 三. 大字典传入前端 Jinja2 模板 四. ...
- 【转】C语言位运算符:与、或、异或、取反、左移与右移详细介绍
转载自:http://www.jb51.net/article/40559.htm,感谢原作者. 以下是对C语言中的位运算符:与.或.异或.取反.左移与右移进行了详细的分析介绍,需要的朋友可以过来参考 ...
- c语言位运算符
C语言既具有高级语言的特点,又具有低级语言的功能. 所谓位运算是指进行二进制位的运算. C语言提供的位运算: 运算符 含义 & 按位与 | 按位或 ∧ 按位异或 ∽ ...
- C语言位运算符:与、或、异或、取反、左移与右移详细介绍
位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型 ...
- C语言位运算符详解
原文链接:https://www.cnblogs.com/911/archive/2008/05/20/1203477.html 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题 ...
- 基础知识复习(一)——C语言位运算符详解
常用的位运算符:与(&),取反(~),或(|),异或(^),左移(«),右移(») 1. 与(&)操作符,按位与,全为1 时,结果取1 11001 &10011 结果:1000 ...
- C语言--位运算符
一.位运算符 1.按位与:& 1> 功能 * 只有对应的两个二进制位为1时,结果位才为1,否则为0 * 举例:10用二进制表示为1010, 7用二进制表示为0111.对两个数值进行&a ...
- C#位运算符的基本用法
位运算符包括:| 按位或 OR,& 按位与 AND,^ 按位异或 XOR,~ 取反 NOT,<< 左移 Left Shift,>> 右移 Right Shift,等等. ...
随机推荐
- train_data
for images, labels in train_data: for images, labels in train_data: img = images[0] img = img.numpy( ...
- python-文件内容操作
1.按文件中数据的组织形式把文件分为文本文件和二进制文件两类. 文本文件:文本文件存储的是常规字符串,由若干文本行组成,通常每行以换行符'\n'结尾.常规字符串是指记事本或其他文本编辑器能正常显示.编 ...
- 2003031120—廖威—Python数据分析第三周作业—numpy的简单操
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/pexy/20sj 这个作业要求链接 https://edu.cnblogs.com/campus/pexy ...
- springboot jodconverter openoffice 实现 office 文件 在线预览
这个已是好几个月前做的,好多细节已记得不那边清楚了.今天部署到环境还遇到不少问题.总结下. 1.office 文件实现在线预览的一般思路就是,将文件转pdf,在通过pdf.js 实现在线浏览.这其中转 ...
- LeetCode 之 111. 二叉树的最小深度
原题链接 思路: 递归计算每个子树的深度,返回左右子树中深度小的值: 由于题目中要求的是到最近叶子节点的深度,所以需要判断 左右子树为空的情况: python/python3: class Solut ...
- kubeadm搭建k8s
一.kubeadm 部署 K8S 集群架构 主机名 IP地址 安装组件 master(2C/4G,cpu核心数要求大于2) 192.168.160.20 docker.kubeadm.kubelet. ...
- QT网络编程【一】
1.QUdpSocket头文件无法识别怎么解决? 问题原因:qmake没有添加network的模块.在工程配置文件中添加配置即可. 2.选择c++的socket库还是QUdpSocket? 3.同样的 ...
- idea的tomcat控制台输出乱码
tomcat乱码问题 idea的tomcat控制台输出乱码 找到自己的安装目录 用vscode打开 ctrl+f打开搜索 输入encoding 最后一个是用来给idea中的控制台输出 --->改 ...
- Rstudio R get filename full path
FILENAME=basename(rstudioapi::getActiveDocumentContext()$path) FULLPATH=dirname(rstudioapi::getActiv ...
- form表单 css的选择器和一些属性以及盒子模型,浮动
form表单 <form action='' method='' enctype=''> <input type='text'> input:更下type属性就可以得到对应的效 ...