C 语言位操作总结
时间:2025-04-06
时间: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字,全部文档内容请下载后查看。喜欢就下载吧 ……
上一篇:中学文明校园创建自查汇报材料
下一篇:虚无世界2生物图鉴大全