C 语言位操作总结

时间:2025-04-06

C 语言位操作

c语言位操作 2009/12/16

一、位的概念 (2)

二、位逻辑运算符 (2)

1、& 操作符 (3)

(1)清除位:设置某位为0,而其他位保持不变。 (3)

(2)检测位 (3)

(3)保留变量的某一位 (3)

(4)与操作运算: (3)

2、| 操作符 (4)

3、^ 操作符 (4)

(1)翻转某一位 (4)

(2)保留原值 (5)

(3)交换两个变量的值,而不用临时变量 (5)

4、~ 操作符 (6)

(1)设定某些位为0,其他的位为1,而不管这个数据的大小。 (6)

(2)联合使用&操作符确保某些位一定被置0: (7)

三、位移运算符 (8)

1、左移运算符 (8)

2、右移运算符 (9)

五、位运算赋值运算符 (10)

六、不同长度的数据进行位运算 (11)

七、位域 (11)

八、c语言位操作的一些注意事项 (12)

1. 位操作尽量使用unsigned char (12)

2. 每次操作最好用括号括起来,不要随意猜想其算术优先级 (15)

C 语言位操作

C语言是一种中级语言,能对计算机硬件直接操作,这就涉及到位的概念。十六进制使用四个二进制位来表示从0到15的数字,这些数字也是单个的十六进制阿拉伯数字所能表示的范围。由四个二进制位或一个BYTE的一半组成的组被称为一个元组。一个BYTE包含两个元组,所以我们可以使用两个十六进制阿拉伯数字来表示一个BYTE类型的值。

一、位的概念

我们知道,在计算机中,一字节占8位(现在的某些电脑也有占16位的),这样表示的数的范围为0-255,也即00000000-11111111。位就是里面的0和1。

char c=100;

实际上c应该是01100100,正好是64H。其中高位在前,低位在后。

二、位逻辑运算符

符号描述运算规则

&位逻辑与两个位都为1时,结果为1,否则为0;

|位逻辑或两个位都为0时,结果为0,否则为1;

^位逻辑异或当两个位相同时,结果为0,否则为1;

~ 取反当为1时结果为0,当为0时,结果为1

表中除去最后一个运算符是单目运算符,其他都是双目运算符。这些运算符只能用于整型表达式。位逻辑运算符通常用于对整型变量进行位的设置、清零、取反、以及对某些选定的位进行检测。在程序中一般被程序员用来作为开

C 语言位操作

关标志。较低层次的硬件设备驱动程序,经常需要对输入输出设备进行位操作。

1、& 操作符

这个操作符理想的应用是建立一个掩码来检查某个位的值。

(1)清除位:设置某位为0,而其他位保持不变。

c=c&0xBF;

这样c和10111111与以后,总能使第6位为0,其他位保持不变。

a=0xfe; //a=0b 11111110

a=a&0x55;//使变量a的第1位、第3位、第5位、第7位清零 a= 0b 01010100

(2)检测位

要知道一个变量中某一位是‘1’还是‘0’,可以使用与操作来实现。

a=0xf5; //a=0b 11110101

result=a&0x08; //检测a的第三位,result=0

(3)保留变量的某一位

要屏蔽某一个变量的其它位,而保留某些位,也可以使用与操作来实现。

a=0x55; //a=0b 01010101

a=a&0x0f; //将高四位清零,而保留低四位 a=0x05

(4)与操作运算:

那么如果参加运算的两个数为负数,又该如何算呢?会以其补码形式表示的二进制数来与运算。a=-5&-3; //a=(0b 1011) & (0b1101) =0b 1001 =-7

C 语言位操作

2、| 操作符

设置位:设置某位为1,而其他位保持不变,可以使用位逻辑或运算。

这个操作符的理想应用是确保某个位被设置。假设我们想某个值的位3一定被设置:

BYTE b = 50;

BYTE c = b | 0x04;

cout << "c = " << c << endl;

这会发生如下的计算:

b=00110010

| 00000100

= 00110110 =result

3、^ 操作符

异或运算符^又被称为XOR运算符,比较两个数,只有这两个数的相应位标志不同时,返回数的相应位才会被设置1。

异或运算主要有以下几种应用:

(1)翻转某一位

当一个位与‘1’作异或运算时结果就为此位翻转后的值。如下例:a=0x35; //a=0b00110101

a=a^0x0f; //a=0b00111010 a的低四位翻转

关于异或的这一作用,有一个典型的应用,即取浮点的相反数,具体的实现下:

f=1.23; //f为浮点型变量值为1.23

C 语言位操作

f=f*-1; //f乘以-1,实现取其相反数,要进行一次乘运算

f=1.23;

((unsigned char *)&f)[0]^=0x80; //将浮点数f的符号位进行翻转实现取相反数

(2)保留原值

当一个位与‘0’作异或运算时,结果就为此位的值。如下例:

a=0xff; //a=0b11111111

a=a^0x0f; //a=0b11110000 与0x0f作异或,高四位不变,低四位翻

(3)交换两个变量的值,而不用临时变量

要交换两个变量的值,传统的方法都需要一个临时变量。实现如下:void swap(unsigned char *pa,unsigned char *pb)

{

unsigned char temp=*pa;//定义临时变量,将pa指向的变量值赋给它

*pa=*pb;

*pb=temp; //变量值对调

}

而使用异或的方法来实现,就可以不用临时变量,如下:

void swap_xor(unsigned char *pa,unsigned char *pb)

{

*pa=*pa^*pb;

*pb=*pa^*pb;

C 语言位操作

*pa=*pa^*pb; //采用异或实现变量对调

}

从上例中可以看到异或运算在开发中是非常实用和神奇的。 …… 此处隐藏:5600字,全部文档内容请下载后查看。喜欢就下载吧 ……

C 语言位操作总结.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219