百度
360搜索
搜狗搜索

c语言移位运算符怎么用,C程序中,左移“((”、右移“))” 的具体用法是什么?详细介绍

本文目录一览: C语言中))和((如何使用?

1、左移运算符(<<):按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
格式:需要移位的数字 << 移位的次数
例如:3<<2
3转换为二进制是0011,所有数字左移2个位置,空位补0,得到1100,即十进制数12。
2、右移运算符(>>):按二进制把所有的数字向右移动对应位移位数,低位移出(舍弃),高位的空位补符号位(正数补零,负数补1)。
格式:需要移位的数字 >> 移位的次数
例如:11 >> 2
11的二进制为1011,所有数向右移2个位置,因为11是正数,所以高位补0,得0010,是十进制的2。
扩展资料:
移位运算符是位操作运算符的一种。移位运算符可以在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:<<(左移)、>>(带符号右移)和>>>(无符号右移)。
数学意义:
1、在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
2、右移一位相当于除2,右移n位相当于除以2的n次方。

C程序中,左移“((”、右移“))” 的具体用法是什么?

这是两个位操作运算,是对参数二进制方式的位移,移动后,空出的位用0补上。例如:
0111 0101 b << 2 :对这个数左移二位后:1101 0100 b;
再如:
5 << 3 :先转换成二进制:0000 0101 b << 3 = 0010 1000 b = 0x28
C语言中,“<<”为左移运算符,“>>”为右移运算符。
具体使用方法如下:
1、左移运算符(<<)将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。例:a = a << 2 将a的二进制位左移2位,右补0,左移1位后a = a * 2; 若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
2、右移运算符(>>)将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。操作数每右移一位,相当于该数除以2。例如:a = a >> 2 将a的二进制位右移2位。
左补0 or 补1 得看被移数是正还是负。

C语言中位移位运算符?

在c语言中位移运算符,有两种,分别是"<<"左移和">>"右移
位移位运算符,顾名思议,用来移位用。
如:
a=0x01;
a <<=2;
则,a变成0x04了。
上面是左移,如果右移是a >>= 2;

C语言左位移运算符和右位移运算符是什么意思,怎么运算,举个例子..

位移运算符是左移"<<"和右移">>"
用处是进行位运算,在嵌入式中应用比较多.因为一般来说位运算执行速度快,所以在精确运算中会常用到.
举个例子,你要除2,
用普通方法是 x/=2;是吧?
位运算的方法是 x>>=1; 右移一位,相当于除2了,效率更高(当然也是省略小数点的)
特别是进行大值之间的运算,就更能体现效率了
左位移 <<
例如 a = 0x01; a<<= 2; 则 结果a = 0x04;
a = 0x81; a<<= 1; 则 结果a = 0x02;
右位移
例如 a = 0x80; a>>= 2; 则 结果a = 0x20;
a = 0x81; a>>= 1; 则 结果a = 0x40;
c语言的移位不是循环,空出来的会补0. 把上面的例子换成2进制看看就很清楚了。
如果要循环移位的话,有专门的系统函数的。
#include "stdio.h"
void main()
{
int x=3;
int m=1;
int n=5;
printf("%d\n",x>>m);
printf("%d\n",x<
<n);
}

输出是1和96

首先将x转换为2进制表示,然后右移1为,变成1

然后将x左移5位,这个你最好理解左右移位的意思

#include

"stdio.h"

void

main()

{

int

x=3;

int

m=1;

int

n=5;

printf("%d\n",x>>m);

printf("%d\n",x<
<n);
}

输出是1和96

首先将x转换为2进制表示,然后右移1为,变成1

然后将x左移5位,这个你最好理解左右移位的意思

就是把一个数转化成二进制再直接对他进行操作

例如:

45>>2 //45右移两位

45的二进制为:101101

右移两位就为: 001011

001011再转化为十进制为:11

所以45>>2= 11

左移运算符

45<<2

45的二进制为:101101

左移两位就为:10110100

10110100再转化为十进制为:180

所以45<<2=180
</n);
</n);

C语言按位左移运算规则

左移一位后最右位补0,移几位补几个0;
左移时最高位在c里面丢弃了。
因为汇编里面只有两种移位:不带CY的循环移位 和带CY的循环移位。CY是进位标志位
不带CY的循环移位是假设左移的话,是把最左位放到最右位了。
带CY的把最左位放进CY,CY的原值放最右位。
C语言的左移运算可以理解为先将CY置0,然后执行带CY的循环移位操作。移位后CY的值是原来的最左位,CY里的0被移到最右位
<<1 相当于 乘2的1次方
从二进制来讲就是,所有位都向左移一位再在末尾加上一个0.
楼上说得对,我再补充下
如果你想移位时最高位不丢弃,比如100,移位成001
那就得先把最高位的状态保存到某个变量中,然后再保存回最低位
最高位丢弃
移动N位补N个零,相当于乘以2的N次方
C语言中按位左移的运算符为<<,其规则如下:
对于操作a<
<n,
1 按照二进制值每位向高位(书写上是向左)移动n位;

2 最高位(最左边的)n位舍去;

3 最低位(最右边)填加n个0.

简单起见,用char型举例如下:

例一

0x12 << 3 =>

B00010010 << 3 =>

B10010 000(这里最高位的三个0被舍去,其它依次左移,最低位补三个0) =>

0x90

即0x12 << 3 = 0x90

例二

0x9E << 2 =>

B10011110 << 2 =>

B01111000 (最高位10舍去,最低位补两个0)=>

0x78

可以编写如下程序验证:

#include

void check(char a, int n){ printf("0x%hhx << %d = 0x%hhx\n", a, n, a<
<n);}int main(){ check(0x12, 3); check(0x9e, 2); return 0;}其运行结果为
0x12 << 3 = 0x900x9e << 2 = 0x78可以看到与我们计算结果是相符的。

</n,

C语言中移位运算

右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如:10100110 >>5(假设字长为8位),则得到的是 11111101。
总之,在C中,左移是逻辑/算术左移(两者完全相同),右移是算术右移,会保持符号位不变.实际应用中可以根据情况用左/右移做快速的乘/除运算,这样会比循环效率高很多.
所以,short a=0xf245,即a=1111001001000101,经过右移后,b=a>>8;b=1111111111110010,即b=0xfff2。注意是有符号右移为算术右移!!!
1<<5,表示左移五位,结果是100000,因为c语言是从0 计数的,所以后面5个0.对应8位寄存器就是xx100000。
(~(1<<5)),表示左移五位再取反,结果是011111.对应8位寄存器就是xx011111。
右移是一样的道理。
如果你把表达式再转成unsigned char型,那么06就丢了,否则单纯这个表达式的结果为0x00006000,从机器角度来讲,移位只针对32位,也就是说先会把A扩展成32位再做移位操作。
<<:用二进制进行的运算,左移一位,最右边位补0,相当于原来的数乘以2;
<<:用二进制进行的运算,右移一位,最左边位补0,相当于原来的数除以2;
char str[]={china};
memcpy(str, str+3,sizeof(str));
简单例子 不一定完全正确。
可以看下memcpy函数帮助,上面有示例
希望对你有点参考意义!
1、“按位与”运算符(&)
按位与是指:参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为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)清零

若想对一个存储单元清零,即使其全部二进制位为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=59c=a&b=16c语言源代码:#include

main(){int a=84;int b = 59;printf("%d",a&b);}

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

两个相应的二进制位中只要有一个为1,该位的结果值为1。借用逻辑学中或运算的话来说就是,一真为真。例如:60(8)|17(8),将八进制60与八进制17进行按位或运算。

00110000|0000111100111111c语言源代码:#include

main(){int a=060;int b = 017;printf("%d",a|b);}

应用:按位或运算常用来对一个数据的某些位定值为1。例如:如果想使一个数a的低4位改为1,则只需要将a与17(8)进行按位或运算即可。

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

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

即0∧0=0,0∧1=1,1∧0=1, 1∧1=0

例: 00111001∧ 0010101000010011c语言源代码:#include

main(){int a=071;int b = 052;printf("%d",a^b);}

应用:

(1)使特定位翻转设有数01111010(2),想使其低4位翻转,即1变0,0变1.可以将其与00001111(2)进行“异或”运算。

即:01111010^0000111101110101

运算结果的低4位正好是原数低4位的翻转。可见,要使哪几位翻转就将与其进行∧运算的该几位置为1即可。

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

例如:012^00=01200001010^0000000000001010

因为原数中的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=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。

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、“取反”运算符(~)

他是一元运算符,用于求整数的二进制反码,即分别将操作数各二进制位上的1变为0,0变为1。

例如:~77(8)

源代码:

#include

阅读更多 >>>  c语言运算符和表达式,c语言运算符和表达式的实验实训结果

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为无符号整型变量,则a=64时,左移一位时溢出的是0,而左移2位时,溢出的高位中包含1。

6、右移运算符(>>)

右移运算符是用来将一个数的各二进制位右移若干位,移动的位数由右操作数指定(右操作数必须是非负值),移到右端的低位被舍弃,对于无符号数,高位补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、位运算赋值运算符

位运算符与赋值运算符可以组成复合赋值运算符。

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

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

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

C语言移位运算符怎么用?

这是c++好吧。。。。算了c和c++的移位运算符都一样
这个难道不对吗,左移就是*2啊(不越界的话)
原理就是你把1110化成二进制(000010001010110),然后每个位都向左移一位,最低位补0,次高位舍弃(最高位是符号位,不能动)
位与
&
0
&
0 =
0
1
&
1
= 1
1
&
0 =
0
0
&
1=
0位或
|
0 |
0 =
0
1 |
1
= 1
1 |
0 = 1
0
|
1=
1位异或
^
0 ^
0
= 0
1
^
1
=
0
1
^
0
=
1
0
^
1
=
1将操作符两边的两个操作数按位对齐做运算。
右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如:10100110
>>5(假设字长为8位),则得到的是
11111101。
总之,在c中,左移是逻辑/算术左移(两者完全相同),右移是算术右移,会保持符号位不变.实际应用中可以根据情况用左/右移做快速的乘/除运算,这样会比循环效率高很多.
所以,short
a=0xf245,即a=1111001001000101,经过右移后,b=a>>8;b=1111111111110010,即b=0xfff2。注意是有符号右移为算术右移!!!

在C语言中“-)”怎么用?

如有结构
struct temp
{
int a;
};
struct temp *p,s;
p=&s;
这时s.a就等价于p->a;
这个操作符称为“指向”,其实你也可以用(*p).a,不过p->a更能体显出“指针”。
用一个指针指向一个内容啊
指针用这个,结构体用 。
1、左移运算符(<<):按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
格式:需要移位的数字 << 移位的次数
例如:3<<2
3转换为二进制是0011,所有数字左移2个位置,空位补0,得到1100,即十进制数12。
2、右移运算符(>>):按二进制把所有的数字向右移动对应位移位数,低位移出(舍弃),高位的空位补符号位(正数补零,负数补1)。
格式:需要移位的数字 >> 移位的次数
例如:11 >> 2
11的二进制为1011,所有数向右移2个位置,因为11是正数,所以高位补0,得0010,是十进制的2。
扩展资料:
移位运算符是位操作运算符的一种。移位运算符可以在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:<<(左移)、>>(带符号右移)和>>>(无符号右移)。
数学意义:
1、在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
2、右移一位相当于除2,右移n位相当于除以2的n次方。

c语言位运算符的用法

  c语言位运算符的用法1   c语言位运算符的用法如下:
  一、位运算符C语言提供了六种位运算符:
  & 按位与
  | 按位或
  ^ 按位异或
  ~ 取反
  << 左移
  >> 右移
  1. 按位与运算
  按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
  例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。
  按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。
  main(){
  int a=9,b=5,c;
  c=a&b;
  printf("a=%d/nb=%d/nc=%d/n",a,b,c);
  }
  2. 按位或运算
  按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
  例如:9|5可写算式如下: 00001001|00000101
  00001101 (十进制为13)可见9|5=13
  main(){
  int a=9,b=5,c;
  c=a|b;
  printf("a=%d/nb=%d/nc=%d/n",a,b,c);
  }
  3. 按位异或运算
  按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12)。
  main(){
  int a=9;
  a=a^15;
  printf("a=%d/n",a);
  }
  4. 求反运算
  求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反。例如~9的运算为: ~(0000000000001001)结果为:1111111111110110。
  5. 左移运算
  左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。例如: a<<4 指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。
  6. 右移运算
  右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的`各二进位全部右移若干位,“>>”右边的数指定移动的位数。
  例如:设 a=15,a>>2 表示把000001111右移为00000011(十进制3)。 应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。
  main(){
  unsigned a,b;
  printf("input a number: ");
  scanf("%d",&a);
  b=a>>5;
  b=b&15;
  printf("a=%d/tb=%d/n",a,b);
  }
  请再看一例!
  main(){
  char a='a',b='b';
  int p,c,d;
  p=a;
  p=(p<<8)|b;
  d=p&0xff;
  c=(p&0xff00)>>8;
  printf("a=%d/nb=%d/nc=%d/nd=%d/n",a,b,c,d);
  }
  c语言位运算符的用法2   C语言位运算。所谓位运算,就是对一个比特(Bit)位进行操作。比特(Bit)是一个电子元器件,8个比特构成一个字节(Byte),它已经是粒度最小的可操作单元了。
  C语言提供了六种位运算符:
  按位与运算(&)
  一个比特(Bit)位只有 0 和 1 两个取值,只有参与&运算的两个位都为 1 时,结果才为 1,否则为 0。例如1&1为 1,0&0为 0,1&0也为 0,这和逻辑运算符&&非常类似。
  C语言中不能直接使用二进制,&两边的操作数可以是十进制、八进制、十六进制,它们在内存中最终都是以二进制形式存储,&就是对这些内存中的二进制位进行运算。其他的位运算符也是相同的道理。
  例如,9 & 5可以转换成如下的运算:
  0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)
  & 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)
  -----------------------------------------------------------------------------------
  0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0001 (1 在内存中的存储)
  也就是说,按位与运算会对参与运算的两个数的所有二进制位进行&运算,9 & 5的结果为 1。
  又如,-9 & 5可以转换成如下的运算:
  1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)
  & 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)
  -----------------------------------------------------------------------------------
  0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)
  -9 & 5的结果是 5。
  关于正数和负数在内存中的存储形式,我们已在教程《整数在内存中是如何存储的》中进行了讲解。
  再强调一遍,&是根据内存中的二进制位进行运算的,而不是数据的二进制形式;其他位运算符也一样。以-9&5为例,-9 的在内存中的存储和 -9 的二进制形式截然不同:
  1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)
  -0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (-9 的二进制形式,前面多余的 0 可以抹掉)
  按位与运算通常用来对某些位清 0,或者保留某些位。例如要把 n 的高 16 位清 0 ,保留低 16 位,可以进行n & 0XFFFF运算(0XFFFF 在内存中的存储形式为 0000 0000 -- 0000 0000 -- 1111 1111 -- 1111 1111)。
  【实例】对上面的分析进行检验。
  00001. #include
  00002.
  00003. int main(){
  00004. int n = 0X8FA6002D;
  00005. printf("%d, %d, %X ", 9 & 5, -9 & 5, n & 0XFFFF);
  00006. return 0;
  00007. }
  运行结果:
  1, 5, 2D
  按位或运算(|)
  参与|运算的两个二进制位有一个为 1 时,结果就为 1,两个都为 0 时结果才为 0。例如1|1为1,0|0为0,1|0为1,这和逻辑运算中的||非常类似。
  例如,9 | 5可以转换成如下的运算:
  0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)
  | 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)
  -----------------------------------------------------------------------------------
  0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1101 (13 在内存中的存储)
  9 | 5的结果为 13。
  又如,-9 | 5可以转换成如下的运算:
  1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)
  | 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)
  -----------------------------------------------------------------------------------
  1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)
  -9 | 5的结果是 -9。
  按位或运算可以用来将某些位置 1,或者保留某些位。例如要把 n 的高 16 位置 1,保留低 16 位,可以进行n | 0XFFFF0000运算(0XFFFF0000 在内存中的存储形式为 1111 1111 -- 1111 1111 -- 0000 0000 -- 0000 0000)。
  【实例】对上面的分析进行校验。
  00001. #include
  00002.
  00003. int main(){
  00004. int n = 0X2D;
  00005. printf("%d, %d, %X ", 9 | 5, -9 | 5, n | 0XFFFF0000);
  00006. return 0;
  00007. }
  运行结果:
  13, -9, FFFF002D
  按位异或运算(^)
  参与^运算两个二进制位不同时,结果为 1,相同时结果为 0。例如0^1为1,0^0为0,1^1为0。
  例如,9 ^ 5可以转换成如下的运算:
  0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)
  ^ 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)
  -----------------------------------------------------------------------------------
  0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1100 (12 在内存中的存储)
  9 ^ 5的结果为 12。
  又如,-9 ^ 5可以转换成如下的运算:
  1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)
  ^ 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0101 (5 在内存中的存储)
  -----------------------------------------------------------------------------------
  1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0010 (-14 在内存中的存储)
  -9 ^ 5的结果是 -14。
  按位异或运算可以用来将某些二进制位反转。例如要把 n 的高 16 位反转,保留低 16 位,可以进行n ^ 0XFFFF0000运算(0XFFFF0000 在内存中的存储形式为 1111 1111 -- 1111 1111 -- 0000 0000 -- 0000 0000)。
  【实例】对上面的分析进行校验。
  00001. #include
  00002.
  00003. int main(){
  00004. unsigned n = 0X0A07002D;
  00005. printf("%d, %d, %X ", 9 ^ 5, -9 ^ 5, n ^ 0XFFFF0000);
  00006. return 0;
  00007. }
  运行结果:
  12, -14, F5F8002D
  取反运算(~)
  取反运算符~为单目运算符,右结合性,作用是对参与运算的二进制位取反。例如~1为0,~0为1,这和逻辑运算中的!非常类似。。
  例如,~9可以转换为如下的运算:
  ~ 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)
  -----------------------------------------------------------------------------------
  1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0110 (-10 在内存中的存储)
  所以~9的结果为 -10。
  例如,~-9可以转换为如下的运算:
  ~ 1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)
  -----------------------------------------------------------------------------------
  0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1000 (9 在内存中的存储)
  所以~-9的结果为 8。
  【实例】对上面的分析进行校验。
  00001. #include
  00002.
  00003. int main(){
  00004. printf("%d, %d ", ~9, ~-9 );
  00005. return 0;
  00006. }
  运行结果:
  -10, 8
  左移运算(<<)
  左移运算符<
<用来把操作数的各个二进制位全部左移若干位,高位丢弃,低位补0。
  例如,9<<3可以转换为如下的运算:

  << 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)

  -----------------------------------------------------------------------------------

  0000 0000 -- 0000 0000 -- 0000 0000 -- 0100 1000 (72 在内存中的存储)

  所以9<<3的结果为 72。

  又如,(-9)<<3可以转换为如下的运算:

  << 1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)

  -----------------------------------------------------------------------------------

  1111 1111 -- 1111 1111 -- 1111 1111 -- 1011 1000 (-72 在内存中的存储)

  所以(-9)<<3的结果为 -72

  如果数据较小,被丢弃的高位不包含 1,那么左移 n 位相当于乘以 2 的 n 次方。

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

  00001. #include

  00002.

  00003. int main(){

  00004. printf("%d, %d ", 9<<3, (-9)<<3 );

  00005. return 0;

  00006. }

  运行结果:

  72, -72

  右移运算(>>)

  右移运算符>>用来把操作数的各个二进制位全部右移若干位,低位丢弃,高位补 0 或 1。如果数据的最高位是 0,那么就补 0;如果最高位是 1,那么就补 1。

  例如,9>>3可以转换为如下的运算:

  >> 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001 (9 在内存中的存储)

  -----------------------------------------------------------------------------------

  0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 0001 (1 在内存中的存储)

  所以9>>3的结果为 1。

  又如,(-9)>>3可以转换为如下的运算:

  >> 1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111 (-9 在内存中的存储)

  -----------------------------------------------------------------------------------

  1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 1110 (-2 在内存中的存储)

  所以(-9)>>3的结果为 -2

  如果被丢弃的低位不包含 1,那么右移 n 位相当于除以 2 的 n 次方(但被移除的位中经常会包含 1)。

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

  00001. #include

  00002.

  00003. int main(){

  00004. printf("%d, %d ", 9>>3, (-9)>>3 );

  00005. return 0;

  00006. }

  运行结果:

  1, -2

  c语言位运算符的用法3   一、位运算符

  在计算机中,数据都是以二进制数形式存放的,位运算就是指对存储单元中二进制位的运算。C语言提供6种位运算符。

  二、位运算

  位运算符 & |~<< >> ∧ 按优先级从高到低排列的顺序是:

  位运算符中求反运算“~“优先级最高,而左移和右移相同,居于第二,接下来的顺序是按位与 “&“、按位异或 “∧“和按位或 “|“。顺序为~ << >> & ∧ | 。

  例1:左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。

  例如:

  a<<4

  指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。

  例2:右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。

  例如:

  设 a=15,

  a>>2

  表示把000001111右移为00000011(十进制3)。

  应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。

  例3:设二进制数a是00101101 ,若通过异或运算a∧b 使a的高4位取反,低4位不变,则二进制数b是。

  解析:异或运算常用来使特定位翻转,只要使需翻转的位与1进行异或操作就可以了,因为原数中值为1的位与1进行异或运算得0 ,原数中值为0的位与1进行异或运算结果得1。而与0进行异或的位将保持原值。异或运算还可用来交换两个值,不用临时变量。

  如 int a=3 , b=4;,想将a与b的值互换,可用如下语句实现:

  a=a∧b;

  b=b∧a;

  a=a∧b;

  所以本题的答案为: 11110000 。
</用来把操作数的各个二进制位全部左移若干位,高位丢弃,低位补0。

阅读更多 >>>  十进制转二进制算法,十进制数转换成为二进制数怎么转换呢?

网站数据信息

"c语言移位运算符怎么用,C程序中,左移“((”、右移“))” 的具体用法是什么?"浏览人数已经达到21次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:c语言移位运算符怎么用,C程序中,左移“((”、右移“))” 的具体用法是什么?的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!