词汇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++学习路线图给爱学习的小伙伴们