C语言详细讲解位运算符的使用

yizhihongxing

C语言详细讲解位运算符的使用

什么是位运算?

位运算是一种直接操作二进制数位的运算,它包括按位与(&)、按位或(|)、按位异或(^)、按位取反(~)等操作。位运算常用于底层开发、算法优化等场景。

按位与运算符(&)

按位与运算符(&)的运算规则是:对于两个二进制数的对应位,如果都是1,结果是1;否则,结果是0。例如:

unsigned int a = 0b10101010;
unsigned int b = 0b11110000;
unsigned int c = a & b;  // c的二进制值为0b10100000

上述代码中,变量a的二进制值为0b10101010,变量b的二进制值为0b11110000。将它们进行按位与运算之后,得到的结果c的二进制值为0b10100000。

按位或运算符(|)

按位或运算符(|)的运算规则是:对于两个二进制数的对应位,只要其中一个值为1,结果就是1;如果都是0,结果就是0。例如:

unsigned int a = 0b10101010;
unsigned int b = 0b11110000;
unsigned int c = a | b;  // c的二进制值为0b11111010

上述代码中,变量a的二进制值为0b10101010,变量b的二进制值为0b11110000。将它们进行按位或运算之后,得到的结果c的二进制值为0b11111010。

按位异或运算符(^)

按位异或运算符(^)的运算规则是:对于两个二进制数的对应位,如果值不同,结果是1;否则,结果是0。例如:

unsigned int a = 0b10101010;
unsigned int b = 0b11110000;
unsigned int c = a ^ b;  // c的二进制值为0b01011010

上述代码中,变量a的二进制值为0b10101010,变量b的二进制值为0b11110000。将它们进行按位异或运算之后,得到的结果c的二进制值为0b01011010。

按位取反运算符(~)

按位取反运算符(~)的运算规则是:对于一个二进制数的每个二进制位,将1变为0,将0变为1。例如:

unsigned int a = 0b10101010;
unsigned int c = ~a;  // c的二进制值为0b01010101

上述代码中,变量a的二进制值为0b10101010。将它进行按位取反运算之后,得到的结果c的二进制值为0b01010101。

示例1:使用位运算计算奇偶性

我们可以使用位运算来计算一个整数的奇偶性。由于二进制中,奇数的最后一位是1,偶数的最后一位是0,因此我们可以通过检查最后一位来判断一个整数的奇偶性。

int is_odd(int x) {
  return x & 1;
}

上述代码中,我们使用了按位与运算符(&)和1进行按位与运算,得到的结果是x的最后一位,如果结果为1,说明x是奇数,返回1;否则,返回0。

示例2:使用位运算交换两个变量的值

我们可以使用位运算来交换两个变量的值,而不需要借助第三个变量。具体做法是使用异或运算符(^)。

void swap(int* a, int* b) {
  *a ^= *b;
  *b ^= *a;
  *a ^= *b;
}

上述代码中,我们对两个整数a和b分别进行异或运算,最终得到的结果就是a和b的交换值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言详细讲解位运算符的使用 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Ubuntu10下如何搭建MySQL Proxy读写分离探讨

    以下是在Ubuntu 10下搭建MySQL Proxy读写分离的详细攻略: 安装MySQL Proxy: 在Ubuntu 10上安装MySQL Proxy软件包。可以使用以下命令进行安装: sudo apt-get install mysql-proxy 配置MySQL Proxy: 创建MySQL Proxy的配置文件。可以使用以下命令创建一个名为prox…

    other 2023年10月17日
    00
  • 聊一聊和nacos2.0.0对接那些事

    聊一聊和nacos2.0.0对接那些事 为了实现服务的注册、发现和配置管理,我们经常需要使用分布式配置中心。而Nacos就是一款非常优秀的分布式配置中心,今天我们来聊一聊和Nacos2.0.0对接的一些事情。 概述 在将服务对接到Nacos上时,我们需要了解以下这些方面: Nacos的核心概念 Nacos的使用方式 与Nacos2.0.0的集成 Nacos的…

    其他 2023年3月28日
    00
  • Android仿百度外卖自定义下拉刷新效果

    Android仿百度外卖自定义下拉刷新效果 在开发 Android 应用中,下拉刷新是一个很常见的需求。本篇教程将会介绍如何仿百度外卖的下拉刷新效果。 1. 布局 在布局文件中添加一个 SwipeRefreshLayout 控件作为父控件,并把需要刷新的布局放在其中。 示例代码: <androidx.swiperefreshlayout.widget.…

    other 2023年6月26日
    00
  • Android 自定义布局竖向的ViewPager的实现

    Android 自定义布局竖向的 ViewPager 的实现攻略 在 Android 中,ViewPager 是一个常用的控件,用于实现滑动切换不同页面的功能。然而,默认情况下,ViewPager 是水平滑动的,如果我们想要实现竖向的 ViewPager,就需要进行自定义布局。下面是实现竖向 ViewPager 的完整攻略。 步骤一:创建自定义的竖向 Vie…

    other 2023年9月5日
    00
  • win32下的命令行集合

    win32下的命令行集合 Win32下的命令行集合是指Windows操作系统中提供的命令行工具,通过这些工具用户可以进行系统管理、文件操作、网络配置等各种任务。下面介绍一些常用的命令行工具及其用法。 命令行工具列表 以下是一些常用的命令行工具及其用途: cmd.exe: 用于在Windows操作系统中启动命令提示符窗口。 dir: 用于列出当前目录中的所有文…

    other 2023年6月26日
    00
  • 获取客户端网卡MAC地址和IP地址实现JS代码

    获取客户端网卡MAC地址和IP地址是通过JavaScript代码实现的。下面是一个完整的攻略,包含了两个示例说明。 步骤1:获取客户端IP地址 要获取客户端的IP地址,可以使用WebRTC(Web实时通信)技术。下面是一个示例代码: // 创建一个RTCPeerConnection对象 const pc = new RTCPeerConnection(); …

    other 2023年7月30日
    00
  • CSRF的攻击方式详解 黑客必备知识

    CSRF的攻击方式详解 CSRF(Cross-site request forgery)跨站请求伪造,也被称为:One Click Attack / Session Riding,缩写为 CSRF/XSRF。 CSRF攻击的核心是攻击者盗取了用户的身份信息,在用户不知情的情况下发送了恶意请求,通过这种方式来达到攻击的目的。 一、攻击过程 攻击者需要先构造一个…

    other 2023年6月27日
    00
  • 微信怎么查询注册时间?微信注册时间两种查询方法

    微信怎么查询注册时间? 微信是一款非常流行的社交媒体应用程序,许多人都想知道自己的微信注册时间。以下是两种查询微信注册时间的方法: 方法一:通过微信个人资料页面查询 打开微信应用程序并登录您的帐户。 在底部导航栏中,点击“我”选项卡,进入个人资料页面。 在个人资料页面上,向下滚动,直到找到“帐号与安全”部分。 点击“帐号与安全”部分下的“更多设置”选项。 在…

    other 2023年8月3日
    00
合作推广
合作推广
分享本页
返回顶部