C语言位运算符

 2024-03-05 02:06:09  阅读 0

运算是指以二进制为基础进行的运算。 在系统软件中,经常需要处理二进制位问题。 C语言提供了6位操作符。 这些运算符只能与整数操作数一起使用,即它们只能与有符号或无符号 char、short、int 和 long 类型一起使用。

C语言提供的位运算符列表:

c语言运算符的结合性_c语言运算符的结合方向_简述c语言运算符的种类

1.“按位与”运算符(&)

按位与是指参与运算的两个数据按照二进制位进行与运算。 如果两个相应的二进制位都为 1,

该位的结果值为 1; 否则为0。这里的1可以理解为逻辑上的真,0可以理解为逻辑上的假。一点一点地用它

“与”的实际和逻辑运算规则是一致的。 逻辑“AND”要求所有操作数都为真,结果才为真。 如果 A=true,B=true,则 A∩B=true

例如:

3&5 3 的二进制代码是 11(2)。 (为了区分十进制和其他基数,本文规定所有非十进制数据必须在数据后附加括号,括号表示基数,二进制标记为2)内存存储数据的基本单位是字节(Byte),一个字节由8位组成。 位是用于描述计算机数据量的最小单位。 在二进制系统中,每个0或1都是一个位。 将 11(2) 补成一个字节是 (2)。 5的二进制码是101(2),如果补成一个字节就是(2)。

按位与运算:

(2)

&(2)

(2)

由此可知3&5=1

c语言代码:

按位与的用途:

简述c语言运算符的种类_c语言运算符的结合性_c语言运算符的结合方向

(1) 清除

如果要清除一个内存单元,即使它的二进制位全部为0,只需要找到一个二进制数,其中每个位都满足以下条件:

原数中为1的位,新数中对应的位为0,然后将两者进行&运算,达到清零的目的。

例子:

原数是43,即(2)。 找另一个数,设其为148,即(2),将两者进行按位与运算:

(2)&(2)

(2)

C语言源代码:

c语言运算符的结合性_c语言运算符的结合方向_简述c语言运算符的种类

(2) 取一个数中的某些指定位

如果有一个整数a(2byte),想要得到低字节,只需要将a与8个1按位与即可。

01100

乙01111

c 01100

(3)预留指定位置:

对数字执行“按位与”运算,该位的计算结果为 1。

例如:有一个数字84,即(2),你想保留左起第3、4、5、7、8位数字。 操作如下:

(2)

&(2)

(2)

即:a=84,b=59

c=a&b=16

C语言源代码:

c语言运算符的结合性_简述c语言运算符的种类_c语言运算符的结合方向

2.“按位或”运算符(|)

只要对应的两个二进制位中有一个为 1,则该位的结果值为 1。借用逻辑中 OR 运算的话说,一个真理就是真。

例如:60(8)|17(8),将八进制60和八进制17进行按位或运算。

|

C语言源代码:

c语言运算符的结合性_简述c语言运算符的种类_c语言运算符的结合方向

应用:按位或运算常用于将某个数据的某些位设置为1。例如:要将数字a的低4位改为1,只需要将a和a进行按位或运算即可17(8)。

3.“异或”运算符(^)

他的规则是:如果参与运算的两个二进制位的值相同,则为0,否则为1

即,0∧0=0、0∧1=1、1∧0=1、1∧1=0。

*例子:*

C语言源代码:

c语言运算符的结合性_c语言运算符的结合方向_简述c语言运算符的种类

应用:

(1) 翻转特定位

假设数字(2),想要翻转它的低4位,即1变成0,0变成1。可以与(2)进行“异或”运算,即:

^

运算结果的低4位正好是原数的低4位的反转。 可见,如果想要翻转哪些位,只需将进行∧运算的位设置为1即可。

(2)与0异或,保留原值

例如:012^00=012

^

因为原数中1与0异或运算结果为1,0^0运算结果为0,所以保留原数。

(3) 不使用临时变量交换两个值

例如:a=3,即11(2); b=4,即 100(2)。

如果想互换a和b的值,可以使用下面的赋值语句:

a=a∧b;

b=b∧a;

a=a∧b;

a=011(2)

(∧)b=100(2)

a=111(2)(a∧b的结果,a变成了7)

(∧)b=100(2)

b=011(2)(b∧a的结果,b变成了3)

(∧)a=111(2)

a=100(2)(a∧b的结果,a变成了4)

相当于下面两步:

① 执行前两条赋值语句:“a=a∧スb;” 和“b=bbb∧a;” 等价于 b=b∧(a∧b)。

② 执行第三条赋值语句:a=a∧b。 由于a的值等于(スa∧b)并且b的值等于(スb∧a∧b),

因此,等价于a=スa∧b∧b∧a∧b,即a的值等于a∧a∧b∧b∧b,也等于b。 太奇妙了!

C语言源代码:

简述c语言运算符的种类_c语言运算符的结合方向_c语言运算符的结合性

4.“否定”运算符(~)

它是一个一元运算符,用于求整数的二进制补码,即在操作数的每个二进制位上将 1 变为 0,将 0 变为 1。

例如:~77(8)

源代码:

c语言运算符的结合性_c语言运算符的结合方向_简述c语言运算符的种类

5. 左移运算符()

右移运算符用于将数字的每个二进制位向右移动若干位。 移动的位数由右操作数指定(右操作数必须是非负值)。 移到右端的低位被丢弃。 对于无符号数,高位用0填充。对于有符号数,有些机器会用符号位填充左边空出的部分(即“算术移位”),而另一些机器会用0填充左边空出的部分(即“逻辑移位”)。转移”) 。

注意:

对于无符号数,右移时左高位移为0; 对于有符号值,如果原来的符号位为0(即数为正数),则左侧高位也移为0。如果符号位原来为1(即负数),则左侧移入为 0 或 1,具体取决于所使用的计算机系统。 有的系统将其移至0,有的系统将其移至1。移入0称为“逻辑移位”,即简单移位; 移至 1 称为“算术移位”。

示例:a 的值为八进制数:

a:01101(以二进制形式表示)

a>>1: 10110(逻辑右移时)

a>>1: 10110(算术右移时)

在某些系统上,a>>1 会产生八进制数,而在其他系统上则可能是 。 Turbo C 和其他一些 C 编译器使用算术右移,即当一个有符号数右移时,如果符号位原来为 1,则左移的高位为 1。

源代码:

c语言运算符的结合方向_c语言运算符的结合性_简述c语言运算符的种类

7. 按位赋值运算符

位运算符和赋值运算符可以构成复合赋值运算符。

例如:&=、|=、>>=、

标签: 运算 进制 符号

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码