位运算符与位运算

 2023-03-01 13:43:59  阅读 0

一、位运算的概念

与运算的基本格式为:a & b

0&0=0 0&1=0 1&1=1

我们直接看一道题

//FileName: chap10_3.c
#include <stdio.h>
int main( )
{
	int a=84,b=59,c;
	c=a&b;
	printf("a=%d\t b=%d\t c=%d\n",a,b,c);
	return 0;
}

程序运行结果如下: a=84    b=59    c=16

与运算的基本格式为:a | b

0|0=1     0|1=1      1|1=1

//FileName: chap10_4.c
#include <stdio.h>
int main( )
{
  int a=060;
  int b=017;
  int c;
  c=a|b;
  printf("a=%d\t b=%d\t c=%d\n",a,b,c);
  return 0;
}

程序运行结果如下: a=48    b=15    c=63

与运算的基本格式为:a ∧ b

0^0=0    0^1=1     1^1=0

//FileName: chap10_5.c
#include <stdio.h>
int main()
{
  int a=071;
  int b = 052;
  int c;
  c=a^b;
  printf("a=%d\t b=%d\t c=%d\n",a,b,c);
  return 0;
}

程序运行结果如下: a=57    b=42    c=19

与运算的基本格式为: ~ a 

~1=0        ~0=1

//FileName: chap10_7.c
#include <stdio.h>
int main()
{
  int a=077;
  printf("%d",~a);
 return 0;
}

程序运行结果如下: 192

与运算的基本格式为:  a<<n

功能:左移运算符是用来将一个数的各二进制位左移若干位,移动的 位数由右操作数指定(右操作数必须是非负值),其右边空出的位用0填补, 高位左移溢出则舍弃该高位。

与运算的基本格式为:  a>>n

功能:右移运算符是用来将一个数的各二进制位右移若干位,移动的位数由右操作数指定(右操作数必须是非负值),移到右端的低位被舍弃,对于无符号数,高位补0。对于有符号数,某些机器将对左边空出的部分用符号位填补(即“算术移位”),而另一些机器则对左边空出的部分用0填补(即“逻辑移位”)。

我们看一道例题

编写程序实现对-9右移1位的功能。 

分析:

当对负数进行右移操作,左端补1不补0。-9右移一位的过程如下:

①-9的原码形式:     1000000000001001   最高位的1表示该数为负数

②-9的反码形式:     1111111111110110    最高位不变,其余各位取反

③-9的补码形式:     1111111111110111    对反码加1

④右移1位-9>>1:    11111111111110111   挤掉右端1位,左端补1

⑤求-9>>1的反码:    1111111111111010    对补码减1而得

⑥求-9>>1的原码:    1000000000000101   反码最高位不变,其余取反 因此,-9>>1的值由-9变为-5。

 

标签:

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码