iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言位运算符如何使用
  • 931
分享到

C语言位运算符如何使用

2023-06-30 05:06:58 931人浏览 安东尼
摘要

本篇内容介绍了“C语言位运算符如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、位运算符分析C语言中的位运算符位运算符直接对 bit

本篇内容介绍了“C语言位运算符如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、位运算符分析

C语言中的位运算符

位运算符直接对 bit 位进行操作,其效率最高。

&按位与
|按位或
^按位异或
~取反
<<左移
>>右移

左移和右移注意点

左操作数必须为整数类型

  • char 和 short 被隐式转换为 int 后进行移位操作

右操作数的范围必须为:[0,31]

左移运算符<< 将运算数的二进制位左移

  • 规则:高位丢弃,低位补0

右移运算符>> 把运算数的二进制位右移

  • 规则︰高位补符号位,低位丢弃

下面一段代码:

#include <stdio.h>int main(){    printf("%d\n", 3 << 2);     printf("%d\n", 3 >> 1);     printf("%d\n", -1 >> 1);     printf("%d\n", 0x01 << 2 + 3);    printf("%d\n", 3 << -1); // oops!    return 0;}

下面为输出结果:

C语言位运算符如何使用

注意四则运算优先级大于位运算,所以 0x01 << 2 + 3 的结果是 32。 还有就是右操作数的范围必须为:[0,31],如果不在这个范围内,程序的输出结果由不同类型的编译器所决定,结果将不确定,就像本代码 3 << -1 一样。

二、小贴士

防错准则:

  • 避免位运算符,逻辑运算符和数学运算符同时出现在一个表达式中

  • 当位运算符,逻辑运算符和数学运算符需要同时参与运算时,尽量使用括号 ( ) 来表达计算次序

小技巧:

  • 左移 n 位相当于乘以 2 的 n 次方,但效率比数学运算符高

  • 右移 n 位相当于除以 2 的 n 次方,但效率比数学运算符高

下面看一段交换两个整型变量值的代码:

#include <stdio.h> #define SWAP1(a,b)  \{                   \    int t = a;      \    a = b;          \    b = t;          \}     #define SWAP2(a,b)  \{                   \    a = a + b;      \    b = a - b;      \    a = a - b;      \}      #define SWAP3(a,b)  \{                   \    a = a ^ b;      \    b = a ^ b;      \    a = a ^ b;      \}    int main()   {    int a = 1;    int b = 2;        //printf("a = %d\n", a);    //printf("b = %d\n", b);        SWAP1(a,b);        printf("a = %d\n", a);    printf("b = %d\n\n", b);        a = 1;    b = 2;        SWAP2(a,b);        printf("a = %d\n", a);    printf("b = %d\n\n", b);        a = 1;    b = 2;    SWAP3(a,b);        printf("a = %d\n", a);    printf("b = %d\n\n", b);           return 0;}

第一种方法需要引入第三方变量,第二种方法可能会导致越界问题,第三种的方法效率较高,且不用引入第三方变量。

注意第三种方法:执行 a = a ^ b; 后,b = a ^ b; 就相当于 b = a ^ b ^ b; 先计算后面的,就是 b = a ^ 0,结果就是 b = a;再执行a = a ^ b;相当于 a = a ^ b ^ b,即 a = a ^ b ^ a,显然结果是 b。

小知识:

A 异或 0 等于 A ,A 异或 1 等于 非A。

三、位运算与逻辑运算

位运算与逻辑运算不同:

  • 位运算没有短路规则,每个操作数都参与运算

  • 位运算的结果为整数,而不是 0 或 1

  • 位运算优先级高于逻辑运算优先级

下面再来看一个混淆改变的判断条件:

#include <stdio.h>int main(){    int i = 0;    int j = 0;    int k = 0;    if( ++i | ++j & ++k )    {        printf("Run here...\n");    }    printf("i = %d, j = %d, k = %d\n\n", i, j, k);    i = 0;    j = 0;    k = 0;     if( ++i || ++j && ++k )    {        printf("Run here...\n");    }    printf("i = %d, j = %d, k = %d\n\n", i, j, k);    return 0;}

下面为输出结果:

C语言位运算符如何使用

可以看到,如果错把++i || ++j && ++k 写成++i | ++j & ++k,虽然都能运行,但是其中的执行细节不一样,在实际工程中可能会出现 bug,而且还不好排查。

“C语言位运算符如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: C语言位运算符如何使用

本文链接: https://www.lsjlt.com/news/327557.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言位运算符如何使用
    本篇内容介绍了“C语言位运算符如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、位运算符分析C语言中的位运算符位运算符直接对 bit...
    99+
    2023-06-30
  • c语言中移位运算符如何使用
    C语言中的移位运算符有两种:左移位运算符()。这两种运算符用于对一个数进行位移操作。左移位运算符(>)和算术右移(>>>)。逻辑右移...
    99+
    2023-09-14
    c语言
  • c语言移位运算符如何用
    C语言中的移位运算符有左移位运算符()。它们可以用于对一个数进行二进制位的移动。左移位运算符(2的操作,结果为2(二进制表示为10)...
    99+
    2023-08-18
    c语言
  • 如何使用C语言运算符
    这篇文章主要介绍“如何使用C语言运算符”,在日常操作中,相信很多人在如何使用C语言运算符问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用C语言运算符”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!&n...
    99+
    2023-06-15
  • C语言位运算符的具体使用
    目录布尔位运算符 移位运算符 对于更多紧凑的数据,C 程序可以用独立的位或多个组合在一起的位来存储信息。文件访问许可就是一个常见的应用案例。位运算符允许对一个字节或更大的数据单位中独...
    99+
    2024-04-02
  • C语言逻辑运算符如何使用
    今天小编给大家分享一下C语言逻辑运算符如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、&& 与 I...
    99+
    2023-06-30
  • c语言中的移位运算符
    移位运算符在程序设计中,是位操作运算符的一种。移位运算符可以在二进制的基础上对数字进行平移。 c语言中提供了两种移位运算符: 左移运算符:<< 右移运算符:>&...
    99+
    2024-04-02
  • C语言详细讲解位运算符的使用
    目录一、位运算符分析二、小贴士三、位运算与逻辑运算四、小结一、位运算符分析 C语言中的位运算符 位运算符直接对 bit 位进行操作,其效率最高。 &按位与|按位或^按位异或~...
    99+
    2024-04-02
  • C语言中求余运算符如何使用
    这篇文章主要介绍了C语言中求余运算符如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言中求余运算符如何使用文章都会有所收获,下面我们一起来看看吧。C语言中求余运算符的使用C语言的算数运算符中最有特点的...
    99+
    2023-07-05
  • C语言算术运算符怎么使用
    本文小编为大家详细介绍“C语言算术运算符怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言算术运算符怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。下表列出了C语言中的算术运算符。运算符操作-减...
    99+
    2023-07-05
  • c语言的运算符怎么使用
    在C语言中,运算符是一种用来执行特定操作的符号。以下是一些常见的C语言运算符的使用方法: 算术运算符:用来执行基本的数学运算,如...
    99+
    2024-04-09
    c语言
  • C语言怎么使用位运算符来判断正负数
    这篇文章主要介绍“C语言怎么使用位运算符来判断正负数”,在日常操作中,相信很多人在C语言怎么使用位运算符来判断正负数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言怎么使用位运算符来判断正负数”的疑惑有所...
    99+
    2023-06-17
  • C语言如何使用移位实现乘除法运算
    这篇文章主要为大家展示了“C语言如何使用移位实现乘除法运算”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言如何使用移位实现乘除法运算”这篇文章吧。移位实现乘...
    99+
    2024-04-02
  • c语言中如何定义运算符
    c语言中运算符定义为在特定操作符作用下的运算数执行运算,分类包括算术、关系、逻辑、位运算符、赋值运算符和特殊运算符。 C语言中运算符的定义 C语言中,运算符是表示特定操作的符号或关键字...
    99+
    2024-05-08
    c语言
  • C语言怎么使用按位与运算符判断奇偶数
    这篇文章主要讲解了“C语言怎么使用按位与运算符判断奇偶数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言怎么使用按位与运算符判断奇偶数”吧!使用按位与运算符判断奇偶数:#include&...
    99+
    2023-06-17
  • c语言中移位运算符的示例分析
    这篇文章主要介绍c语言中移位运算符的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用C语言可以以简易的方式编译、处理低级存储...
    99+
    2023-06-15
  • python位运算符如何运算
    Python中的位运算符包括:与运算(&)、或运算(|)、异或运算(^)、取反运算(~)、左移运算()。下面是每个位运算符的运算规则...
    99+
    2023-10-11
    python
  • C++算术运算符如何使用
    本篇内容主要讲解“C++算术运算符如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++算术运算符如何使用”吧!1. 前言编写程序时,数据确定后,就需要为数据提供相应的处理逻辑(方案或算法...
    99+
    2023-07-02
  • c语言中运算符的用法
    c 语言运算符用于执行变量和常量的操作,包括算术(如加减乘除)、关系(如等于大于)、逻辑(如与或非)和位操作符(如左移右移)。不同类型的运算符具有不同的优先级,当多个运算符出现在同一表达...
    99+
    2024-04-29
    c语言
  • 如何正确使用C语言中的逻辑或运算符||
    标题: 如何正确使用C语言中的逻辑或运算符|| 在C语言中,逻辑或运算符||是一种常用的逻辑运算符,用于判断条件中的任意一个条件是否成立。正确使用逻辑或运算符可以帮助我们编写更加简洁...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作