C 位操作

原创 2012年03月29日 17:37:43

一. 位运算符

C提供了几种位操作符,如下表所示:

运算符

含义

运算符

含义

&

按位与

~

取反

|

按位或

<<

左移

^

按位异或

>>

右移

二. 位运算操作

1. "按位与" (&

原则是:11,00

2. “按位或” (|)

原则是:11,全00即只要有一个为1,则结果为1

3. “异或” (^)

原则是:相同为0,不同为1。即参与运算的两个位相同(‘1’与‘1’或‘0’与‘0’)时结果为‘0’,不同时为‘1’。

4. “取反” (~

原则是:10,是 01

5. "左移"(<<

用来将一个数的各位全部向左移若干位。

:a = a<<2 表示将a的各位左移 2 位,右边补0

左移 N 位,就等于乘以了2N,但一结论只适用于左移时被溢出的高位中不包含‘1’的情况。

6. "右移"(>>)

右移与左移相类似,只是位移的方向不同。

如:a = a>>1表示将a 的各位向右移动1位。

右移N位,就相当于除以2N,但要注意符号位的问题。

三. 应用

1. & 的应用

a. 特定位清零 (mask中特定位 置0,其它位为1,s = s & mask)

b. 取某数中指定位 (mask中特定位 置1,其它位为0,s = s & mask)

2. |的应用

a. 常用来将源操作数某些位 置1,其它位不变。 (mask中特定位 置1,其它位为0,s = s | mask)

3. ^ 的应用

a. 使特定位的值取反 (mask中特定位 置1,其它位为0,s = s ^ mask)

b. 不引入第三变量,交换两个变量的值 (a = a^b; b = a^b; a = a^b)

嵌入式Linux下C程序设计--位操作

  • 2012年09月03日 11:22
  • 867KB
  • 下载

C/C++基础-原码/反码/补码/位操作实现四则运算

原码/反码/补码,常见位操作,四则运算

C51 I2C 位操作

  • 2014年04月14日 16:39
  • 10KB
  • 下载

内核中的基本C库函数 位操作

位操作 set_bit 在位图中原子地设置某一位 void set_bit (int nr, volatile void * addr) nr为要设置的位,addr为位图的起始地址 ...

c/c++位操作简介--移位、位与、位或、异或

首先,计算机内部是以补码形式表示(参见:http://www.cnblogs.com/tenghoo/archive/2008/06/01/1211663.html)的,而且c移位操作采取补0还是补符...

C 位操作 详解

一、位运算: |  按位或操作符:result=exp1|exp2;当exp1和exp2中对应位中至少有一个为1时,result中对应位为1,否则为0。 & 按位与操作符::result=exp1...

嵌入式经典面试题---C中有关预处理,关键字const、volatile、static,位操作,等等

红色是我标注的重点,绿色是自己添加的内容  C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面...

C 位操作 左移32位 错误

搬砖拼接64位数字,因高32位long未先强转64,导致拼接失败,顺便发现个问题,32位变量左移32位等于原数值。C下位移操作为逻辑位移,全部左移补零后,数值应为零,结果和预期不符,遂查找症结所在。 ...

一起talk C栗子吧(第十九回:C语言实例--位操作)

各位看官们,大家好,上一回中咱们说的是输出十六进制的例子,这一回咱们说的例子是:位操作。闲话 休提,言归正转。让我们一起talk C栗子吧! 看官们,位操作有五种,与、或、非、异或、...
  • talk_8
  • talk_8
  • 2015年07月18日 13:55
  • 1275
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C 位操作
举报原因:
原因补充:

(最多只允许输入30个字)