逍遥自在学C语言 | 位运算符^的高级用法

前言

在上一篇文章中,我们介绍了|运算符的高级用法,本篇文章,我们将介绍^ 运算符的一些高级用法。

逍遥自在学C语言 | 位运算符^的高级用法

一、人物简介

  • 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。

逍遥自在学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;
}

逍遥自在学C语言 | 位运算符^的高级用法

  • 两个相同的数,异或结果为0
  • 第一次的a ^= b 等价于 a = a ^ b
  • b ^= a 此时等价于 b = b ^ a ^ b ,结果为 b = a
  • 第二次的a ^= b 此时等价于 a = a ^ b ^ a,结果为 a = b
  • 这样ab的数值就进行了交换

三、判断两个变量的符号是否相同

#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;
}

逍遥自在学C语言 | 位运算符^的高级用法

  • 有符号数的最高位是符号位,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;
}

逍遥自在学C语言 | 位运算符^的高级用法

  • 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;
}

逍遥自在学C语言 | 位运算符^的高级用法

  • a的二进制表示为1111b的二进制表示为0101
  • 按位与(&)运算后得到两者相同的部分0101
  • 按位异或(^)运算后得到两者不同的部分1010
  • (a ^ b)>> 1,等价于(a ^ b)/2,也就是将两者不同的部分除以2
  • 相同的部分,加上二分之一不同的部分,就得到两个数的平均数

小结

通过这篇文章,我们学会了用位运算符^的4种高级用法

1、交换两个变量的值

2、判断两个变量的符号是否相同

3、将一个数的某些位翻转

4、求两个数的平均数

在下一篇文章中,我们将介绍位运算符~的一些高级用法。

?欢迎各位 ?点赞 ⭐收藏 ?评论,如有错误请留言指正,非常感谢!

原文链接:https://www.cnblogs.com/Wayne123/p/17309199.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:逍遥自在学C语言 | 位运算符^的高级用法 - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • C语言循环结构详解

    C语言循环结构详解 什么是循环结构? 循环结构是计算机编程语言中最重要的结构之一,它允许程序重复执行一次或多次某个代码块。 在C语言中,循环结构主要有以下三种: for循环结构 while循环结构 do…while循环结构 for循环结构 for循环结构是最常用的循环结构之一,在需要重复执行N次的情况下,使用for循环比较便捷。 for循环结构的语法格式…

    C 2023年5月23日
    00
  • mac外接显示器没反应怎么办? mac外接显示器无信号原因分析

    Mac外接显示器没反应怎么办? 问题描述 当我们在使用Mac电脑的时候,有时需要将其接入到外接显示器上进行扩展,这样可以提高工作效率,但是有时会遇到显示器无法正常显示出图像的情况,以下就对这个问题进行分析解决。 解决步骤 步骤一:检查连接线 第一步要检查的是连接线是否正确连接。通常外接显示器使用的是HDMI、DVI或者VGA接口,所以需要确保连接线与显示器接…

    C 2023年5月24日
    00
  • Vue常见报错整理大全(从此报错不害怕)

    Vue常见报错整理大全(从此报错不害怕) 在Vue开发过程中,经常会遇到各种各样的报错,对于刚入门的开发者来说,这些报错可能会让他们感到很无从下手。本篇文章将带大家了解常见的Vue报错及解决方法,让大家在开发过程中对于不同的报错可以迅速地定位到问题根源,更快地解决问题。 1. Property or method “xxx” is not defined o…

    C 2023年5月23日
    00
  • c++实现发送http请求通过get方式获取网页源代码

    首先,C++实现发送HTTP请求需要使用到第三方库,最常用的是libcurl库。下面我们将具体介绍如何使用libcurl库来通过GET方式获取网页源代码。 步骤一:安装libcurl 根据自己的系统选择合适的安装方式,例如使用Linux系统下的包管理工具可以执行以下命令来安装: sudo apt-get install libcurl4-openssl-de…

    C 2023年5月24日
    00
  • C语言实现导航功能

    C语言实现导航功能攻略 概述 本攻略介绍如何使用C语言实现导航功能。导航功能需要通过地图信息和用户的目的地,给用户提供最短路径。 实现步骤 1. 定义地图和结构体 定义一个地图结构体,它包含节点和边。每个节点都有一个ID和一组坐标。每条边都有起点、终点、距离以及其它属性 typedef struct { int id; // 节点ID double x, y…

    C 2023年5月23日
    00
  • C币交易所是怎么交易数字货币的?C币交易所支持哪些数字货币交易?

    C币交易所是一个数字货币交易平台,支持用户交易多种数字货币。在 C币交易所进行数字货币交易,需要注册一个账户,然后在账户中充值一定数量的数字资产,再根据当前市场价格进行买卖交易。 以下是数字货币交易的具体流程: 1. 注册账户 在C币交易所的官网上点击注册按钮,填写必要的个人信息完成注册并激活账户后,即可开始数字货币交易。 2. 充值数字资产 在C币交易所首…

    C 2023年5月23日
    00
  • jQuery+ajax+asp.net获取Json值的方法

    获取Json值是Web开发中非常常见的任务,基于jQuery和Ajax技术结合asp.net框架可以轻松实现这一功能。下面是获取Json值的完整攻略: 1. 使用jQuery+Ajax获取Json值的基本流程 使用jQuery的$.ajax函数向服务器端发送GET或POST请求,并指定相应参数(包括请求类型、请求地址、数据类型等); 服务器端返回JSON格式…

    C 2023年5月23日
    00
  • Jquery通过JSON字符串创建JSON对象

    当使用jQuery进行Ajax请求时,响应得到的数据通常是一个JSON字符串,为了使获得的JSON数据更易于操作,需要将其转化为JSON对象。下面是实现此过程的完整攻略: 1. 使用parseJSON方法 parseJSON方法可以将JSON字符串转化为JSON对象。 var jsonStr = ‘{"name":"Emma&q…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部