Clanguage第12章位运算
- 格式:ppt
- 大小:74.51 KB
- 文档页数:16
位运算(转)12 位运算 C语⾔是为描述系统设计的,因此它应该具有汇编语⾔所以完成的⼀些功能。
C语⾔既有⾼级语⾔的特点,⼜具有低级语⾔的功能。
因⽽具有⼴泛的⽤途和很强的⽣命⼒。
12.1 位运算符和位运算运算符 含义& 按位与| 按位或^ 按位异或~ 取反<< 左移>> 右移说明:(1)位运算符中除 ~ 外,均为⼆⽬运算符,即要求出侧各有⼀个运算量。
(2)运算早只能是整型或字符型的数据,不能为实型数据。
12.1.1 按位与运算符 & 参加运算的两个数制,按⼆进制进⾏与运算。
如果两个相应的⼆进位数为1,刚该位的结果为 1 否则为 0 即: 0 & 0 = 0;0 & 1 = 0;1 & 0 = 0;1& 1 = 1例如:3 & 8 并不等于8,应该是按位与3 = 000000115 = 00000101 &00000001 因此 3 & 5 的值得 1,如果参加 & 是负数(-3 & -5),则以补码形式表⽰为⼆进制数。
然后按位进⾏与运算。
按拉与有⼀些特殊的⽤途: (1)清零。
如果想将⼀个单元清零,即使其全部⼆进位为 0,只要找⼀个⼆进制数,其中各个位符合以下条件:原来数中为 1 的位,新数中相应位为 0。
然后使⼆者进⾏ & 运算,即可以达到清零⽬的。
(2)取⼀个数中某些指定位。
如有⼀个整数 a (2个字节)想要其中的低字节。
只需将 a 与(337)。
按位与即可。
(3)要想将哪⼀个保留下来,就与⼀个数进⾏ & 运算,此数在该位位1,如有⼀个数 01010100,想把其中左⾯第3,4,5,7,8可以这样运算:0101010000111011 &0001000012.1.2 按位或运算符 | 两个相应的⼆进位中只要有⼀个为 1,该位的结果就为 1。
0|0=0; 0|1=1; 1|0=1; 1|1=1; 按位或运算常⽤来对⼀个数据的某些位定值为1,如 a 是⼀个整数(16位)有表达式 a & 0377,则低 8 位全置为 1。
C语言中的位运算与移位操作详解C语言中的位运算是指对数据的二进制位进行操作的一种操作方式,其中包括位与(&)、位或(|)、位异或(^)、位取反(~)等。
位运算通常用于各种底层编程和优化算法中,能够快速高效地操作二进制数据。
下面将详细介绍C语言中常用的位运算符及其操作。
1. 位与(&):将两个操作数的对应位进行与运算,只有当两个对应位都为1时,结果位才为1;否则为0。
例如,0b1101 & 0b1011 = 0b1001。
2. 位或(|):将两个操作数的对应位进行或运算,只要两个对应位中有一个为1,结果位就为1;否则为0。
例如,0b1101 | 0b1011 = 0b1111。
3. 位异或(^):将两个操作数的对应位进行异或运算,若两个对应位不同,则结果位为1;否则为0。
例如,0b1101 ^ 0b1011 = 0b0110。
4. 位取反(~):对操作数的每一位进行取反操作,将1变为0,0变为1。
例如,~0b1101 = 0b0010。
除了以上基本的位运算符,C语言还提供了左移(<<)和右移(>>)操作符,用于对操作数进行移位操作。
1. 左移(<<):将一个操作数的所有位向左移动指定的位数,移动时低位补0。
例如,0b1101 << 2 = 0b0100。
2. 右移(>>):将一个操作数的所有位向右移动指定的位数。
根据操作数的符号位和机器的具体实现,右移可能是算术右移(负数最高位补1)或逻辑右移(0填充)。
例如,0b1101 >> 1 = 0b0110(逻辑右移);0b1001 >> 1 = 0b1100(算术右移)。
位运算和移位操作在C语言中的应用非常广泛,主要用于以下几个方面:1. 位掩码:通过位与运算(&)可以用来提取操作数的指定位或者对操作数的指定位进行清零操作。
这在一些底层硬件控制或者状态管理中非常有用。
位运算 c语言位运算是计算机编程中常用的一种运算方式,通过对二进制数的位进行逻辑运算来实现各种功能。
在C语言中,位运算符提供了一系列操作符,可以对整数类型的数据进行位运算。
C语言中的位运算符包括与运算符(&)、或运算符(|)、异或运算符(^)、非运算符(~)、左移运算符(<<)和右移运算符(>>)。
下面将逐一介绍这些运算符的功能和使用方法。
与运算符(&)用来对两个二进制数的对应位进行逻辑与运算,只有当两个位都为1时,结果位才为1,否则为0。
例如,对于二进制数1010和1100进行与运算,结果为1000。
或运算符(|)用来对两个二进制数的对应位进行逻辑或运算,只要有一个位为1,结果位就为1。
例如,对于二进制数1010和1100进行或运算,结果为1110。
异或运算符(^)用来对两个二进制数的对应位进行异或运算,当两个位不同时,结果位为1,否则为0。
例如,对于二进制数1010和1100进行异或运算,结果为0110。
非运算符(~)用来对一个二进制数的各位进行取反运算,即将0变为1,将1变为0。
例如,对于二进制数1010进行非运算,结果为0101。
左移运算符(<<)用来将一个二进制数的各位向左移动指定的位数,右侧用0填充。
例如,将二进制数1010左移2位,结果为101000。
右移运算符(>>)用来将一个二进制数的各位向右移动指定的位数。
对于无符号数,左侧用0填充;对于有符号数,左侧用符号位填充。
例如,将二进制数1010右移2位,结果为0010。
位运算在计算机编程中有着广泛的应用。
例如,可以使用位运算来进行数据压缩和解压缩,通过对数据进行位的压缩,可以减少存储空间的占用。
此外,位运算还可以用于位图操作、位字段操作、位掩码操作等。
在使用位运算时,需要注意一些细节。
首先,位运算符的优先级较低,需要使用括号来区分运算次序。
其次,位运算符只能用于整数类型的数据,不能用于浮点数。