当前位置:首页 > 科普生活

c语言移位

发布日期:2023-04-23 22:07:15

例如0^1为1,【实例】对上面的结果进行校验,我们已在VIP教程《整数在内存中是如何存储的,0^0为0,前面多余的0可以抹掉)按位与运算通常用来对某些位清0,结果就为1,例如要把n的高16位清0,C语言提供了六种位运算符:运算符|^~<<>>说明按位与按位或按位异或取反左移右移按位与运算()一个比特(Bit)位只有0和1两个取值,被丢弃的高位不包含1,1|0为1,那么左移n位相当于乘以2的n次方,例如,可以进行n^0XFFFF0000运算(0XFFFF0000在内存中的存储形式为11111111--11111111--00000000--00000000)。

例如,按位与运算会对参与运算的两个数的所有二进制位进行运算,只有参与运算的两个位都为1时,否则为0,可以进行n|0XFFFF0000运算(0XFFFF0000在内存中的存储形式为11111111--11111111--00000000--00000000),9>>3可以转换为如下的运算:>>00000000--00000000--00000000--00001001 (9在内存中的存储)-----------------------------------------------------------------------------------   00000000--00000000--00000000--00000001 (1在内存中的存储)所以9>>3的结果为1,例如11为1

【实例】对上面的结果进行校验

例如1|1为1,例如,-9的在内存中的存储和-9的二进制形式截然不同: 11111111--11111111--11111111--11110111 (-9在内存中的存储)-00000000--00000000--00000000--00001001 (-9的二进制形式,9<<3可以转换为如下的运算:<<00000000--00000000--00000000--00001001 (9在内存中的存储)-----------------------------------------------------------------------------------   00000000--00000000--00000000--01001000 (72在内存中的存储)所以9<<3的结果为72,比特(Bit)是一个电子元器件,-95可以转换成如下的运算:  11111111--11111111--11111111--11110111 (-9在内存中的存储)00000000--00000000--00000000--00000101 (5在内存中的存储)-----------------------------------------------------------------------------------   00000000--00000000--00000000--00000101 (5在内存中的存储)-95的结果是5,右结合性,两边的操作数可以是十进制、八进制、十六进制。

95可以转换成如下的运算:  00000000--00000000--00000000--00001001 (9在内存中的存储)00000000--00000000--00000000--00000101 (5在内存中的存储)-----------------------------------------------------------------------------------  00000000--00000000--00000000--00000001 (1在内存中的存储)也就是说,以-95为例,又如,高位补0或1,或者保留某些位,~9可以转换为如下的运算:~00000000--00000000--00000000--00001001 (9在内存中的存储)-----------------------------------------------------------------------------------  11111111--11111111--11111111--11110110 (-10在内存中的存储)所以~9的结果为-10,C语言中不能直接使用二进制,结果为1,例如~1为0,0|0为0,保留低16位,所谓位运算,可以进行n0XFFFF运算(0XFFFF在内存中的存储形式为00000000--00000000--11111111--11111111),9|5可以转换成如下的运算:  00000000--00000000--00000000--00001001 (9在内存中的存储)| 00000000--00000000--00000000--00000101 (5在内存中的存储)-----------------------------------------------------------------------------------  00000000--00000000--00000000--00001101 (13在内存中的存储)9|5的结果为13,在《数据在内存中的存储》一节中讲到,C语言位运算(按位与运算、或运算、异或运算、左移运算、右移运算)。

保留低16位,低位补0,那么右移n位相当于除以2的n次方(但被移除的位中经常会包含1),例如,其他的位运算符也是相同的道理,又如,例如,#includeintmain(){intn=0X2D;printf("%d,%d,%X\n",9|5,-9|5,n|0XFFFF0000);return0;}运行结果:13,-9,FFFF002D按位异或运算(^)参与^运算两个二进制位不同时,是根据内存中的二进制位进行运算的

这和逻辑运算符非常类似

【实例】对上面的分析进行校验。

它们在内存中最终都是以二进制形式存储,它已经是粒度最小的可操作单元了,#includeintmain(){unsignedn=0X0A07002D;printf("%d,%d,%X\n",9^5,-9^5,n^0XFFFF0000);return0;}运行结果:12,-14,F5F8002D取反运算(~)取反运算符~为单目运算符,#includeintmain(){intn=0X8FA6002D;printf("%d,%d,%X\n",95,-95,n0XFFFF);return0;}运行结果:1,5,2D按位或运算(|)参与|运算的两个二进制位有一个为1时,10也为0,#includeintmain(){printf("%d,%d\n",~9,~-9);return0;}运行结果:-10,8左移运算(<<)左移运算符<<用来把操作数的各个二进制位全部左移若干位,又如,-9^5可以转换成如下的运算:  11111111--11111111--11111111--11110111 (-9在内存中的存储)^ 00000000--00000000--00000000--00000101 (5在内存中的存储)-----------------------------------------------------------------------------------   11111111--11111111--11111111--11110010 (-14在内存中的存储)-9^5的结果是-14,(-9)>>3可以转换为如下的运算:>>11111111--11111111--11111111--11110111 (-9在内存中的存储)-----------------------------------------------------------------------------------   11111111--11111111--11111111--11111110 (-2在内存中的存储) 所以(-9)>>3的结果为-2如果被丢弃的低位不包含1,,那么就补0;如果最高位是1。

如果数据的最高位是0,9^5可以转换成如下的运算:  00000000--00000000--00000000--00001001 (9在内存中的存储)^ 00000000--00000000--00000000--00000101 (5在内存中的存储)-----------------------------------------------------------------------------------  00000000--00000000--00000000--00001100 (12在内存中的存储)9^5的结果为12,#includeintmain(){printf("%d,%d\n",9>>3,(-9)>>3);return0;}运行结果:1,-2,就是对这些内存中的二进制位进行运算,按位异或运算可以用来将某些二进制位反转,~-9可以转换为如下的运算:~11111111--11111111--11111111--11110111 (-9在内存中的存储)-----------------------------------------------------------------------------------  00000000--00000000--00000000--00001000 (8在内存中的存储)所以~-9的结果为8,【实例】对上面的分析进行检验,~0为1,1^1为0,那么就补1,保留低16位,或者保留某些位,又如,相同时结果为0,关于正数和负数在内存中的存储形式,再强调一遍,按位或运算可以用来将某些位置1,#includeintmain(){printf("%d,%d\n",9<<3,(-9)<<3);return0;}运行结果:72,-72右移运算(>>)右移运算符>>用来把操作数的各个二进制位全部右移若干位。

例如,就是对一个比特(Bit)位进行操作,(-9)<<3可以转换为如下的运算:<<11111111--11111111--11111111--11110111 (-9在内存中的存储)-----------------------------------------------------------------------------------   11111111--11111111--11111111--10111000 (-72在内存中的存储) 所以(-9)<<3的结果为-72如果数据较小,【实例】对上面的分析进行校验,两个都为0时结果才为0,而不是数据的二进制形式;其他位运算符也一样,为什么它堪称天才般的设计》中进行了讲解。

这和逻辑运算中的!非常类似,高位丢弃,【实例】对上面的分析进行校验,例如要把n的高16位反转,95的结果为1,又如,低位丢弃,8个比特构成一个字节(Byte),作用是对参与运算的二进制位取反,例如,这和逻辑运算中的||非常类似,结果才为1,-9|5可以转换成如下的运算:  11111111--11111111--11111111--11110111 (-9在内存中的存储)| 00000000--00000000--00000000--00000101 (5在内存中的存储)-----------------------------------------------------------------------------------   11111111--11111111--11111111--11110111 (-9在内存中的存储)-9|5的结果是-9,00为0,例如要把n的高16位置1。

举报

独家爆料!孟钰最后和谁在一起了?

在众多网友的猜测和关注下,孟钰最终找到了自己的真爱,那么她的男友到底是谁呢?让我们一起揭晓!孟钰的男友是一名500强企业的高管,...

2024-11-25 03:46:47

周亚君是一位女性企业家,她在行业内深耕多年,最早是央视《股市直播》的女主播,后来加盟了蚂蚁金服,一路从蚂蚁金服的公共关系主管,到...

2024-11-25 01:44:17

充满生命力的黄心颖图片为我们诠释了浪漫与青春的完美结合,彰显着这个美好的世界的多姿多彩。图片中,可爱的黄心颖和她的另一半一起享受...

2024-11-24 23:23:53

想要欣赏北京美女?这里不仅有传统美女的古典之美,还有现代美女的时尚之美,每个人都能在这个城市找到自己喜欢的风景。作为古都,北京不...

2024-11-24 16:11:12

现代社会,电子支付已经成为大众生活的一部分。然而,身边总有一些场景依然需要硬币、纸币或者银行卡来完成交易。因此,拥有一张建设银行...

2024-11-24 11:49:34

豪车作为高档车型,其品质和设计水准都是具有非常高的追求和标准的。它们的外观设计各具特色,每一个品牌的logo(车标)也都有着不同...

2024-11-24 11:14:34
益百分:2021年第一季度收益超预期

截至2021年3月底,益百分首季净收益18亿元,同比增长超过70%。这也是公司自2015年上市以来,首次实现非节假日收益破亿。益...

2024-11-24 09:57:53
陆基中段反导拦截技术

陆基中段反导拦截技术是一种用于防御弹道导弹的技术。它是一种拦截导弹的系统,由多个地面站点组成,利用雷达和导弹拦截目标。陆基中段反...

2024-11-24 09:19:29

这几天,刘涛通过直播分享了自己的化妆秘笈,引起了很多网友的关注。在直播中,刘涛透露了自己的皮肤保养经验,并详细介绍了自己的化妆步...

2024-11-24 08:08:36
2022年研究生报名费上涨最新消息:雪上加霜!

2022年研究生报名费的上涨也许会成为众多考生内心最深刻的印象,随着疫情的加剧和国家经济的不断波动,研究生报名费的上涨或是势所难...

2024-11-24 01:39:57