C语言位运算符:与、或、异或、取反、左移和右移!

2023-02-19 0 1,076

词汇TNUMBERCCC13符:与、或、XOR、row、右移和右移

位演算是指按十进制展开的演算。在软件控制系统中,经常须要处置chunk的难题。C词汇提供更多了6位元操作操作符。那些操作符根本无法用作auth数组,即根本无法用作带记号或无记号的char,short,int与long类别。

C词汇提供更多的TNUMBERCCC13符条目:

操作符 涵义 叙述

& 按位与 假如三个适当的chunk都为1,则此位的结论值1,不然为0

| 按位或 三个适当的chunk中如果有一个为1,此位的结论值1

^ 按位XOR 若参与演算的三个chunk值完全相同则为0,不然为1

~ row ~是十元操作符,借以对三个十进制数按位row,将要0变1,将1变0

<< 右移 借以将三个数的各chunk全数左移N位,右补0

>> 右移 将三个数的各chunk右移N位,移到右端低位被抛弃,对无记号数,低位补0!

1、“按位与”操作符(&)

按位与是指:参与演算的三个统计数据,按chunk展开“与”演算。假如三个适当的chunk都为1,则此位的结论值1;不然为0。这儿的1能认知为方法论中的true,0能认知为方法论中的false。按位与只不过与方法论上“与”的演算准则完全一致。方法论上的“与”,明确要求演算数全真道,结论才为真。若,A=true,B=true,则A∩B=true 比如:3&5 3的十进制代码是11(2)。(为的是界定十进制和其它十进制,责任编辑明确规定,但凡非十进制的统计数据均在统计数据前面加之括弧,括弧中标明其十进制,十进制则记号为2)缓存存储统计数据的基本上基层单位是二十进制(Byte),三个二十进制由8位元(bit)所共同组成。位是借以叙述笔记本电脑统计信息量的最轻基层单位。十进制控制系统中,每一0或1是三位元。将11(2)补回成三个二十进制,则是00000011(2)。5的十进制代码是101(2),将其补回成三个二十进制,则是00000101(2)

按位与演算:

00000011(2)

&00000101(2)

00000001(2)

由此可知3&5=1

c词汇代码:

#include

main()

{

int a=3;

int b = 5;

printf(“%d”,a&b);

}

按位与的用途:

(1)清零

若想对三个存储单元清零,即使其全数chunk为0,如果找三个十进制数,其中各位元符合一下条件:

原来的数中为1的位,新数中适当位为0。然后使二者展开&演算,即可达到清零目的。

例:原数为43,即00101011(2),另找三个数,设它为148,即10010100(2),将两者按位与演算:

00101011(2)

&10010100(2)

00000000(2)

c词汇源代码:

#include

main()

{

int a=43;

int b = 148;

printf(“%d”,a&b);

}

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

若有三个整数a(2byte),想要取其中的低二十进制,只须要将a与8个1按位与即可。

a 00101100 10101100

b 00000000 11111111

c 00000000 10101100

(3)保留指定位:

与三个数展开“按位与”演算,此数在此位取1.

比如:有一数84,即01010100(2),想把其中从左边算起的第3,4,5,7,8位保留下来,演算如下:

01010100(2)

&00111011(2)

00010000(2)

即:a=84,b=59

c=a&b=16

c词汇源代码:

#include

main()

{

int a=84;

int b = 59;

printf(“%d”,a&b);

}

2、“按位或”操作符(|)

三个适当的chunk中如果有三个为1,此位的结论值1。借用方法论学中或演算的话来说是,一真为真。

比如:60(8)|17(8),将八十进制60与八十进制17展开按位或演算。

00110000

|00001111

00111111

c词汇源代码:

#include

main()

{

int a=060;

int b = 017;

printf(“%d”,a|b);

}

应用:按位或演算常借以对三个统计数据的某些位定值1。比如:假如想使三个数a的低4位改为1,则只须要将a与17(8)展开按位或演算即可。

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=b∧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词汇源代码:

#include

main()

{

int a=3;

int b = 4;

a=a^b;

b=b^a;

a=a^b;

printf(“a=%d b=%d”,a,b);

}

4、“row”操作符(~)

他是十元操作符,用作求整数的十进制反码,即分别将数组各chunk上的1变为0,0变为1。

比如:~77(8)

源代码:

#include

main()

{

int a=077;

printf(“%d”,~a);

}

5、右移操作符(<<)

右移操作符是借以将三个数的各十进制位右移若干位,移动的位数由右数组指定(右数组必须是非负

值),其右边空出的位用0填补,低位右移溢出则抛弃该低位。

比如:将a的十进制数右移2位,右边空出的位补0,左边溢出的位抛弃。若a=15,即00001111(2),右移2

位得00111100(2)。

源代码:

#include

main()

{

int a=15;

printf(“%d”,a<<2);

}

右移1位相当于该数乘以2,右移2位相当于该数乘以2*2=4,15<<2=60,即乘了4。但此结论只适用作该

数右移时被溢出抛弃的低位中不包含1的情况。

假设以三个二十进制(8位)存三个整数,若a为无记号auth变量,则a=64时,右移一位时溢出的是0

,而右移2位时,溢出的低位中包含1。

6、右移操作符(>>)

右移操作符是借以将三个数的各chunk右移若干位,移动的位数由右数组指定(右数组必须是非负

值),移到右端低位被抛弃,对无记号数,低位补0。对有记号数,某些机器将对左边空出的部分

用记号位填补(即“算术偏转”),而另一些机器则对左边空出的部分用0填补(即“方法论偏转”)。注

意:对无记号数,右移时左边高偏转入0;对有记号的值,假如原来记号位为0(该数为正),则左边也是移

入0。假如记号位原来为1(即负数),则左边移入0还是1,要取决于所用的计算机控制系统。有的控制系统移入0,有的

控制系统移入1。移入0的称为“方法论偏转”,即简基层单偏转;移入1的称为“算术偏转”。

例: a的值是八十进制数113755:

a:1001011111101101 (用十进制形式表示)

a>>1: 0100101111110110 (方法论右移时)

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

在有些控制系统中,a>>1得八十进制数045766,而在另一些控制系统上可能得到的是145766。Turbo C和其它一些C

编译采用的是算术右移,即对有记号数右移时,假如记号位原来为1,左面移入低位的是1。

源代码:

#include

main()

{

int a=0113755;

printf(“%d”,a>>1);

}

7、位演算赋值操作符

TNUMBERCCC13符与赋值操作符能共同组成复合赋值操作符。

比如: &=, |=, >>=, <<=, ∧=

例: a & = b相当于 a = a & b

a << =2相当于a = a << 2

“我是一名从事了10年开发的老程序员,最近我花了一些时间整理关于C词汇、C++,自己有做的材料的整合,三个完整的学习C词汇、C++的路线,学习材料和工具。全球最大的C/C++、编程爱好者的聚集地就在我这儿!欢迎初学和进阶中的小伙伴。希望你也能凭自己的努力,成为下三个优秀的程序员。工作须要、感兴趣、为的是入行、转行须要学习C/C++的伙伴能跟我一起学习!”

关注我的专栏,带你遨游代码世界!

最后分享一张C/C++学习路线图给爱学习的小伙伴们

C语言位运算符:与、或、异或、取反、左移和右移!

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务