`
hqs7636
  • 浏览: 220982 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C语言中的位操作

阅读更多
目录:
1.前言
2.数值在计算机中的表示
3. 位运算
4.位段



正文:

1.前言

为了节省内存空间,在系统软件中常将多个标志状态简单地组合在一起,存储到一个字节(或字)中。C语言是为研制系统软件而设计的,所以她提供了实现将标志状态从标志字节中分离出来的位运算功能。

所谓位运算是指,按二进制位进行的运算。



2.数值在计算机中的表示

1) 二进制位与字节

计算机系统的内存储器由许字节的单元组成

1byte=8bit(每位的取值为0/1)

7 6  5  4  3  2  1  0 

上图表示一个字节的编号,最左端位最高位,最右端为最低位


2) 数值的原码表示

原码:
最高位为符号位(0正数,1负数),其余各位代表数值本身的绝对值(以二进制表示)

PS:约定用1个字节表示1个整数

例:+9 --> 0000 1001

    -9 --> 1000 1001  
                            

3) 数值的反码表示

反码:
正数=原码
负数=符号位不变,其余位取反

例:+9--->0000 1001
    - 9--->1111 0110


4) 数值的补码表示

补码:
正数=原码
负数=符号位不变,其余按位取反,然后整个数加1

例:+9--->0000 1001
    - 9--->1111 0111


5) 数值在计算机中的表示──补码

在计算机系统中,数值一律用补码表示(存储),原因在于:

    * 可以将符号位和其它位统一处理
    * 减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃.




3.位运算

3.1 位运算及其运算符

Note:(1)x,y和位数等操作数只能为int,char型.(2)仅~为单目运算符,其余均为双目运算符(3)~0间接构造一个全1的数

1) 按位与 ──  &
        (1)格式:x&y
        (2)规则:对应位均为1时才为1,否则为0:3&9=1。
        (3)主要用途:取(或保留)1个数的某(些)位,其余各位置0。

例,3&9=1

           0011
         & 1001  
        ────        
          0001=1 

2)按位或 ── |
        (1)格式:x|y
        (2)规则:对应位均为0时才为0,否则为1:3|9=11。
        (3)主要用途:将1个数的某(些)位置1,其余各位不变。

例,3|9=11

           0011 
        |  1001   
       ────        
         1011=11                                     
      

3)按位异或---^

        (1)格式:x^y

        (2)规则:对应位相同为0,不同为1:3^9=10。

        (3)主要用途:将1个数的某(些)位置1,其余各位不变。


4)按位取反── ~

        (1)格式:~x

        (2)规则:各位翻转,即原来为1的位变成0,原来为0的位变成1:在IBM-PC机中,

                 ~0=0xffff,~9=0xfff6。

        (3)主要用途:间接地构造一个数,以增强程序的可移植性。

5)按位左移── <<

        (1)格式:x<<位数

        (2)规则:使操作的各位左移,低位补0,高位溢出:5<<2=20。


6)按位右移──>>

        (1)格式:x>>位数

        (2)规则:使操作的各位右移,移出的低位舍弃;

             高位:1)对无符号数和有符号中的正数,补0;

                   2)负数取决于所使用的系统:补0的称为逻辑右移,补1的称为算术右移



位操作的应用:
  

例子1:

         从键盘上输入1个正整数给int变量num,输出由8~11位构成的数(从低位、0号开始编号)。

基本思路:

(1)使变量num右移8位,将8~11位移到低4位上。

(2)构造1个低4位为1、其余各位为0的整数。

(3)与num进行按位与运算. 

程序:

#include<stdio.h>
int main(void)
{
       int num;       
       int num1;
       int res;
       printf("Input the num:");
       scanf("%d",&num);
       num1=~(1<<4);      //构造一个低4位为1的整数
       num=num>>8;       //输入的数右移动8位,使得低4位为原数的8-11位
       res=num&num1;      //与运算得到8-11位的数,其余位为0
       printf("The result is %d\n",res); 
       return 0;
}




例子2:

从键盘上输入1个正整数给int变量num,按二进制位输出该数。

程序:

#include  "stdio.h"

main()

    { int num, mask, i;

       printf("Input a integer number: ");

       scanf("%d",&num);

       mask = 1<<15;  /*构造1个最高位为1、其余各位为0的整数(屏蔽字)*/

      printf("%d=" , num);

      for(i=1; i<=16; i++)

         { putchar(num&mask ? '1' : '0'); /*输出最高位的值(1/0)*/

            num <<= 1;  /*将次高位移到最高位上*/

            if( i%4==0 ) putchar(','); /*四位一组,用逗号分开*/

        }

      printf("\bB\n");

    }




例子3:

给定一个整数a,写两个函数,第一个对a设置bit3,第二个清除bit3,其它位不变。

程序:

#define BIT3 ox1<<3

static int a;

void set_bit3(){

            a|=BIT3;

}

void clear_bit3(){

           a&=~BIT3;

}

分享到:
评论

相关推荐

    C语言_位操作,如何判断某一位是1还是0

    C语言_位操作,如何判断某一位是1还是0

    C语言位操作——复习笔记 绝好的学习资料

    C语言中的位操作是编程中的一个基础且强大的工具,它涉及到计算机硬件层面的二进制数据处理。在C语言中,位操作允许我们直接对内存中的位进行读写,这在处理硬件寄存器、节省存储空间或者进行高效计算时非常有用。...

    单片机C语言位操作实例

    本文给大家分享了单片机C语言位操作实例。

    C语言数位排序共4页.pdf.zip

    1. 数据预处理:将输入的整数转化为字符串,方便逐位操作。 2. 数位提取:遍历每个数字的每一位,存储每个位上的数字出现的次数。 3. 位值计算:根据每位数字的出现次数生成新的数组索引,确定每个数字在新数组中的...

    位操作的艺术:C语言中的位操作符全解析

    2. **接近硬件**:C语言提供了对内存地址和位操作的直接控制,使其非常适合硬件级编程。 3. **可移植性**:C语言编写的程序可以在不同的操作系统和硬件平台上编译和运行,具有很好的可移植性。 4. **丰富的库支持**...

    基于C语言实现64位操作系统的设计与实现源码.zip

    基于C语言实现64位操作系统的设计与实现源码.zip基于C语言实现64位操作系统的设计与实现源码.zip基于C语言实现64位操作系统的设计与实现源码.zip基于C语言实现64位操作系统的设计与实现源码.zip基于C语言实现64位...

    基于C语言的计算机软件编程技术 (1).pdf

    算法是软件编程的灵魂,C语言中位操作的运用可以优化程序性能。位操作包括位移、位与、位或、位异或等操作,它们可以用来实现数据的快速处理和存储优化。在算法实现方面,C语言程序员需要具备逻辑思维和数学基础,以...

    c语言中获取整数和浮点数的符号位

    在C语言中,获取整数和浮点数的符号位是一个非常重要的知识点。符号位是指数值的正负符号,判断符号位是进行逻辑处理的基础。下面是获取整数和浮点数符号位的相关知识点。 首先,为什么要获取符号位?在许多情况下...

    C语言的移位操作

    关于C语言位操作,左移时总是移位和补零。右移时无符号数是移位和补零,此时称为逻辑右移;而有符号数大多数情况下是移位和补最左边的位(也就是补最高有效位),移几位就补几位,此时称为算术右移。

    c语言中文API

    10. **位操作**:位操作符如、&gt;&gt;、&、|、^等,可以用于低级别数据操作,例如设置或清除位,这对于底层编程和优化非常重要。 理解并掌握C语言的API,不仅能编写出高效、可靠的程序,还能为学习其他高级编程语言打下...

    C语言-位运算和预处理命令

    关于C语言的课件,关于位运算和预处理命令。

    嵌入式C语言位操作的移植与优化.pdf

    嵌入式系统中,C语言位操作的移植与优化是非常重要的。单片机的应用越来越广泛,种类也越来越多。嵌入式C语言的可读性强、移植性好,能够大大减轻软件工程师的劳动强度,因而越来越多的单片机工程师开始使用C语言...

    C语言中的位操作高级用法:深度解析与代码实现

    位操作是C语言中一项强大的特性,它允许程序员在二进制层面上操作数据。通过熟练使用位操作,程序员可以提高程序的执行效率,实现对硬件的精细控制,以及在资源受限的环境中进行高效的数据存储和处理。随着技术的...

    C语言编程开发中用好位操作符

    C语言编程开发中用好位操作符C语言编程开发中用好位操作符C语言编程开发中用好位操作符C语言编程开发中用好位操作符C语言编程开发中用好位操作符C语言编程开发中用好位操作符C语言编程开发中用好位操作符C语言编程...

    c语言中的位数组源码(bit array)

    c语言中的结构位数组的具体操作实现。位数组的应用范围很广的、

    C语言的底层操作支持

    在C语言中,底层操作包括对内存、寄存器、位操作等的直接控制。例如,移位操作是C语言提供的一种底层操作,通过`&gt;&gt;`和`操作符实现。右移操作时,如果是无符号数,空位会填充0;如果是有符号数,则可能填充0或符号位...

    c语言教案 c语言课件 C语言

    9. **第11章位运算.ppt**:位运算符的使用,包括按位与、或、非、异或,以及左移和右移,它们在低级别操作和内存优化中非常有用。 10. **第12章文件.ppt**:文件操作是C语言高级编程的一部分,涵盖了文件打开、读写...

    水滴石穿C语言之C语言的底层操作

    2. **丰富的底层功能支持**:C语言提供了一系列用于底层操作的功能,如指针操作、位操作等,这些功能使得开发者能够在接近硬件层面上进行编程。 #### 二、移位操作 移位操作是C语言中常见的底层操作之一,主要用于...

    最全最好用最实用C语言中文帮助文档

    C语言是编写操作系统、设备驱动、嵌入式软件等底层程序的常用工具,因为它可以直接操作硬件资源,提供高效的性能。 总的来说,“最全最好用最实用C语言中文帮助文档”涵盖了C语言从基础到高级的全部内容,无论你是...

Global site tag (gtag.js) - Google Analytics