`

C语言位操作初步

阅读更多

位操作允许程序员对单独的位进行操作,例如,早某些机器上,短整型占16位,位操作将每一位单独操作。

位操作允许程序员设置、清除、测试与其他的操作,这些操作如下表:

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

这些操作用于整型或者字符型

1、按位与(&)

Bit1 Bit2 Bit1 & Bit2
0 0 0
0 1 0
1 0 0
1 1 1

通常我们可把按位“与”操作 & 作为关闭某位(即将该位置0)的手段,例如我们想要关闭a数中的第3位,而又不影响其它位的现状,可以用一个数0xF7,即二进制数1111 0111去与a数作按位“与”运算:
    0x88 1000 1000 a数
& 0xF7 1111 0111 屏蔽数
   =       1000 0000

注意,这个数除第3位为0外,其它各位均为1,操作的结果只会将a数中的第3位置0,而a数的其它位不受影响。也就是说,若需要某个数的第n位关闭,只需要将该数与另一个数按位相与,另一个数除了相应的第n位为0外,其它各位都为1,以起到对其它各位的屏蔽作用。

应用举例:判断一个数字的奇偶性

由于在二进制下,当最后一个数字为0,则此数字为偶数,若为1则此数为奇数

代码如下:

int even(const int value)
{
    return ((value & 1)==0);
}

 

2、按位或(|)

Bit1 Bit2 Bit1 | Bit2
0 0 0
0 1 1
1 0 1
1 1 1

通常我们可把按位“或”操作 | 作为置位(即将该位置1)的手段,例如我们想要将a数中的第0位和1位置1,而又不影响其它位的现状,可以用一个数0x03,即二进制数00000011去与a数作按位“或”运算:

  0x88 1000 1000 a数
| 0x03 0000 0011 屏蔽数
   =     1000 1011

注意,这个数除第0、1位为1外,其它各位均为0,操作的结果只会将a数中的第0、1位置1,而a数的其它位不受影响。也就是说,若需要某个数的第n位置1,只需要将该数与另一个数按位相“或”,另一个数除了相应的第n位为1外,其它各位都为0,以起到对其它各位的屏蔽作用

3、按位异或(^)

Bit1 Bit2 Bit1 ^ Bit2
0 0 0
0 1 1
1 0 1
1 1 0

 

按位“异或”运算 ^ 具有一些特殊的应用,介绍如下:

① 按位“异或”运算可以使特定的位取反
例如:我们想让a数中的最低位和最高位取反,只要用0x81,即二进制数10000001去与它作按位“异或”运算,其运算结果同上式。经过操作后,最高位的值已经由1变0,而最低位的值也已经由0变1,起到了使这两位翻转的效果。其它位的状态保持不变。
可以看到,这个数除最低位、最高位为1外,其它各位均为0,操作的结果只会将a数中的第0、7位取反,而a数的其它位不受影响。也就是说,若需要某个数的第n位取反,只需要将该数与另一个数按位相“异或”,另一个数除了相应的第n位为1外,其它各位都为0,以起到对其它各位的屏蔽作用。上面的运算可以用a = a ^ (0x81) 来表示,也可以用a ^ =(0x81) 来表达。

② 直接交换两个变量的值
例如,若有变量a = 3,b = 4,想要交换它们的值,可以做如下一组操作:
a ^ = b
b ^ = a
a ^ = b

首先,a ^ = b:
    a 0000 0011
^ b 0000 0100
a = 0000 0111

其次,b ^ = a:
    b 0000 0100
^ a  0000 0111
b =  0000 0011

最后,a ^ = b:
    a 0000 0111
^ b  0000 0011
a =  0000 0100

这样,a、b两个变量中的值就进行了对调。

4、按位取非(~)

Bit ~Bit
0 1
1 0

5、左移操作(<<)与右移操作(>>)

对于x,x<<n相当于x^n,x>>n相当于x/(2^n)

6、右移操作详解:

右移操作相当的诡异,当一个变量进行右移操作,C语言需要填充左边空的比特位

然而对于有符号变量,C使用符号位,如下表:

  signed char signed char unsigned char
表达式 9>>2 -8>>2 248>>2
Binary Value>>2 0000 1010>>2 1111 1000>>2 1111 1000>>2
结果 ??00 0010 ??11 1110 ??11 1110
填充 Sign Bit(0) Sign Bit(1) 0
最终结果(二进制) 0000 0010 1111 1110 0011 1110
最终结果(短整型) 2 -2 62
分享到:
评论

相关推荐

    C语言数值计算初步

    )以及位运算符等。在数值计算中,我们经常用到的是算术运算符,尤其是乘法和除法。需要注意的是,浮点数除法可能会引入舍入误差,这在高精度计算中需要特别关注。 控制结构如条件语句(if...else)和循环(for、...

    C语言上机操作详解

    ### C语言上机操作详解 ...通过本文介绍的知识点,相信读者已经对C语言上机操作有了初步了解。接下来还需要通过大量实践来加深理解,并逐渐掌握更复杂的技术栈。希望每位初学者都能在编程之路上越走越远!

    C语言程序设计:第3章 C语言程序设计初步 (3).ppt

    《C语言程序设计:第3章 C语言程序设计初步 (3).ppt》的讲解涵盖了C语言的基础知识,包括C语句的作用与分类、数据的输入和输出、常用的数学函数、程序结构以及编程中需要注意的问题。下面将对这些知识点进行详细阐述...

    C语言程序设计:第3章 C语言程序设计初步.ppt

    - C语言没有内置的I/O指令,所有输入输出操作通过调用标准I/O库函数完成,头文件`&lt;stdio.h&gt;`定义了这些函数。 - **格式输出函数printf** 具有一般形式`printf(格式控制字符串, 输出表列);`,其中格式控制字符串...

    c语言基础教程电子书

    第三章:C语言程序设计初步 本章深入到C语言的程序结构,包括变量的声明、初始化和作用域。你会学习如何使用控制流程语句,如if-else、switch、for、while和do-while循环,以及如何使用break和continue语句来控制...

    C语言学习初步---易懂

    "C语言学习初步---易懂"这个主题主要面向初学者,提供了一个基础的C语言学习平台,包括150个C语言代码实例,旨在帮助初学者理解和掌握C语言的基本概念和语法。 1. **变量与数据类型**:C语言中的数据类型包括整型...

    c语言教案.ppt

    这部分内容深入介绍了C语言中的基本数据类型,如整型、浮点型、字符型等,以及运算符(算术、比较、逻辑、位操作等)的使用,和它们在表达式中的作用。理解这些基础知识对于编写有效的程序至关重要。 第四章:最...

    C语言进阶基础,快速熟悉C语言

    5. **位运算**:C语言支持位级别的操作,如位移、按位与、按位或、按位异或,这对于低级别硬件操作和高效算法实现非常有用。 6. **内存管理**:动态内存分配(malloc、calloc、realloc、free)是C语言的一大特色,...

    C语言初步认知.docx

    C语言的特点鲜明,它允许直接访问硬件资源,如进行位操作和地址操作,这使得它在嵌入式系统中非常有用。此外,C语言支持结构化编程,拥有丰富的数据类型和大量的运算符,这使得它能够清晰地表达复杂的逻辑。其移植性...

    C语言程序设计 谭浩强

    1. **C语言基础**:C语言的起源、特点以及在软件开发中的应用,让读者对C语言有一个初步的认识。 2. **数据类型**:介绍整型、浮点型、字符型等基本数据类型,以及如何声明变量和常量。 3. **运算符与表达式**:...

    c语言程序设计(谭浩强) 教案

    本章还会讲解C语言的基本组成,包括源程序、预处理、编译、链接等步骤,使学习者对C语言的编译过程有一个初步的理解。 第2章 "数据类型、运算符与表达式"是C语言的核心内容之一。数据类型包括基本类型(如整型、...

    凌阳单片机及C语言应用

    凌阳单片机是嵌入式系统领域中的一款重要设备,尤其...通过以上学习,初学者可以逐步掌握凌阳单片机的C语言编程技术,并具备开发实际项目的初步能力。在实践中不断积累经验,可以进一步提升在嵌入式领域的专业技能。

    谭浩强C语言全书word版

    首先,C语言概述部分会介绍C语言的历史、特点和应用领域,让读者对C语言有初步的认识。接着,基本数据类型部分将讲解整型、浮点型、字符型等数据类型,以及变量的声明和初始化。 运算符与表达式是C语言中的重要元素...

    C语言入门教程菜鸟到专家

    - **位操作**:通过位操作符可以直接对二进制位进行操作,这对于硬件编程非常有用。 - **结构化编程**:C语言支持结构化的程序设计方法,包括函数、条件语句(if/else)、循环(for/while/do-while)等控制结构。 ...

    C语言教程(谢竞博)

    1. **C语言概述**:讲解C语言的历史、特点和应用领域,使学习者对C语言有一个初步的认识。 2. **数据类型**:介绍基本的数据类型如整型、浮点型、字符型等,以及如何声明和使用变量。 3. **运算符与表达式**:涵盖...

    C语言课件完整版

    9. **位运算**:讲解位操作符及其在内存管理、数据处理中的应用。 10. **预处理器**:介绍宏定义、头文件包含等预处理指令。 11. **文件操作**:学习如何打开、读取、写入和关闭文件,进行文件操作。 12. **错误...

    C语言进阶训练包

    这个"C语言进阶训练包"是专为已经初步了解C语言基础的新手准备的,旨在通过一系列的小程序测试来深入理解和熟练掌握C语言的关键字、语法结构以及编程技巧。 在C语言学习的过程中,关键字的理解至关重要。C语言的...

    C语言教程 doc版

    1. **C语言概述**:介绍C语言的历史背景、特点及应用领域,使读者对C语言有一个初步的认识。 2. **基本语法**:讲解C语言的语法规则,如变量、常量、数据类型(整型、浮点型、字符型等)、运算符和表达式,以及如何...

    C语言程序设计的初步知识PPT课件.pptx

    总的来说,C语言程序设计的初步知识包括了如何命名和使用标识符、定义和初始化变量、理解基本数据类型以及掌握各种运算符。这些基础概念构成了编写C语言程序的基石,是每个C程序员必须熟练掌握的。

Global site tag (gtag.js) - Google Analytics