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)

c语言-编程位操作技巧

http://www.acmwiki.com/index.php?doc-view-5.htm  位反转:  unsigned rev(unsigned x)  {      ...
  • hengfanz
  • hengfanz
  • 2014年04月16日 17:38
  • 859

学习C语言中的位操作

本篇文章主要参考了以下这篇文章: http://apps.hi.baidu.com/share/detail/5984673 最近在写程序时,我需要判断一个DWORD 类型变量的某一个二进...
  • friendan
  • friendan
  • 2012年06月18日 17:56
  • 2808

C语言位操作的神应用(位操作)

不少代码通过位操作,解题很巧妙,学习语言,就要学其精髓,学其底层,不可蜻蜓点水 例一: 函数getbits(x,p,n),返回x中从右边数第p位开始向右数n位的字段 unsigned getbi...
  • ccDLlyy
  • ccDLlyy
  • 2016年08月10日 10:30
  • 1974

C语言之内存和位操作

内存和程序运行 程序运行的目的是为了得到特定的结果,计算机本质上是用于计算的,既然是用于计算,就需要参与计算的数据,那这些数据就存储在内存中,计算之前参与运算的数据以及运算之后得到的数据,都存储在内...
  • u012741741
  • u012741741
  • 2016年11月20日 18:12
  • 1604

C语言的几个位操作函数——用起来很方便

在汇编语言中有直接对位进行操作的指令,如置位、复位、位取反、测试某一位等,这对于硬件操作十分方便,在C语言中尽管也提供了一些位操作手段,如按位与、按位或、按位取反等,但它们是对一个字节进行操作...
  • kofandlizi
  • kofandlizi
  • 2011年06月04日 10:30
  • 1470

ARM学习随笔(1) 位操作

由于刚开始学习ARM,看到很多
  • bgk083
  • bgk083
  • 2014年07月19日 13:23
  • 404

单片机的C语言中位操作用法(转)

单片机的C语言中位操作用法作者:郭天祥   在对单处机进行编程的过程中,对位的操作是经常遇到的。C51对位的操控能力是非常强大的。从这一点上,就可以看出C不光具有高级语言的灵活性,又有低级语言贴近硬件...
  • apus
  • apus
  • 2009年05月07日 23:00
  • 1361

使用位操作,减少除法和取模的运算。

实现高效的C语言编写的第三招--使用位操作,减少除法和取模的运算。 在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所 有的运算和操作。一般的位操作是用来控制硬件...
  • lupin8888
  • lupin8888
  • 2014年03月18日 09:48
  • 596

c语言位域操作—_结构体内冒号:的使用

这是C语言位域问题 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,...
  • zhjmyx
  • zhjmyx
  • 2016年12月19日 13:41
  • 814

C位操作介绍

C++位操作包括两种:传统的C语言方式的位操作和C++中利用bitset容器的位操作 一、传统的C方式位操作: 1.基本操作:    使用一个unsigned int变量来作为位容器。 2....
  • lizhifa2011
  • lizhifa2011
  • 2014年07月04日 15:14
  • 943
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C 位操作
举报原因:
原因补充:

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