逍遥自在学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,等等. ...
随机推荐
- 第12组 Beta冲刺 (4/5)
1.1基本情况 ·队名:美少女战士 ·组长博客:https://www.cnblogs.com/yaningscnblogs/p/14016973.html ·作业博客:https://edu.cnb ...
- JMeter控制器遍历一组数据
1.获取数据列表,通过JSON提取器提取所有name信息 获取到的name总条数 = name_matchNr = 4 2.通过添加控制器遍历一组数据 2.1 方式一:添加循环控制器 循环控制次数为 ...
- C++ Primer 15.9文本查找程序
可以通过查询语句的组合进行检索,VS2015. main函数,读取存有数据的文件,进行检索.提供两种入口.查词,与按照表达式查询. 1 #include <iostream> 2 #inc ...
- CATIA的后处理
同其他的cam软件一样,catia可以使用配置好的后处理文件输出相应的G代码文件, 也可以输出相应的刀位文件. 下图中的1选择的是后处理文件:下图2种设置的是输出刀位文件的格式. 输出G代码: 选择[ ...
- 剑指offer----1.二维数组查找
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...
- python学习记录(一)-基础
交换变量值 a,b = 10,20 print(a,b) #10 20 a,b = b,a print(a,b) #20 10 大字符串 str = '''最近在看的动漫: 黑之契约者.咒术回战... ...
- 关于vmwork中centos7的虚拟机创建
1.准备vmwork软件和centos7的镜像文件 vmwork软件下载地址https://www.vmware.com/cn/products/workstation-pro/workstation ...
- 事与愿违( backfire effect ) 的故事
例如:我作为一个需求者,我想要买世界上最便宜的苹果手机,但是当我进入市场去寻找世界上最便宜苹果手机的时候,这一行为本身就使得苹果手机的价格上升. 作为供应者,我本来要去卖最贵的房子,但是当我作为开发商 ...
- element表格数据v-for替换期望文字
后端返回等级编码 "1","2"....并给你一个字典obj[ {dicCode: "4", dictFlag: "riskLev ...
- 推荐一套轻量级的开源图床系统:Light Fast Picture
如果您跟我一样平时有些博客的习惯,那么图片存储是否有困扰过你呢?今天就给大家推荐一款不错的开源图床系统:Light Fast Picture 它是一个基于koa + vue3.x + typescri ...