一、移位操作符

1.右移操作符

分为两种:

  • 算数右移:右边丢弃,左边补原符号位
  • 逻辑右移:右边丢弃,左边补0

注:现在的计算机一般都是用第一种:算数右移

举例:

#include<stdio.h>
int main()
{
  int a=16;
  int b=a>>1;
  printf("%d",b);//b=8
  //00000000000000000000000000010000
  //00000000000000000000000000001000
}

首先,要了解原码、反码、补码(简单说一下)(这里很重要)

整数在内存中存储的形式是补码的二进制。

整数的二进制表示:有3种(原码、反码、补码)

原码:直接根据数值写出的二进制序列就是原码(32位)

反码:原码的符号位不变,其他位按位取反就是反码

补码:反码加1,就是补码

2.左移操作符

规则:左边丢弃,右边补0

二、位操作符(它们的操作数必须是整数)

1.按位与 &(按二进制与)

#incldue<stdio.h>
int main()
{
  int a=2;
  int b=4;
  int c=a&b;
  //1&1=1
  //1&0=0
  //0&1=0
  //0&0=0
  //a:0000000000000000000000000000010
  //b:0000000000000000000000000000100
//a&b:0000000000000000000000000000000
  printf("%d",c);//c=0
}

2.按位或和按位异或

和按位与一样,按位或与按位异或都是按二进制或,按二进制异或的

#include<stdio.h>
int main()
{
  int a=3;
  int b=13;
  int c=a|b;
  //1|1=1
  //1|0=1
  //0|1=1
  //0|0=0
  //a=00000000000000000000000000000011
  //b=00000000000000000000000000001111
  //c=00000000000000000000000000001111
  printf("%d",c);//c=15
  int c=a^b;
  //1^1=0
  //1^0=1
  //0^1=1
  //0^0=0
  //a=00000000000000000000000000000011
  //b=00000000000000000000000000001111
  //c=00000000000000000000000000001100
  printf("%d",c);//c=12

下节还会讲解其他的操作符,感兴趣可以追更哦。