位运算操作

本文详细解析了C语言中位运算的基本概念及其在整数操作中的应用,包括按位与、按位或、按位异或、按位取反、按位左移和按位右移等操作,并通过实例展示了这些运算的实际效果。

#include<stdio.h> /**位运算 / int main(void) { int i = 5; int j = 6; / i = 0101;j=0110 0101 & 0110 -------- 0100 = 4

  0&0 = 0
  1&0 = 0
  0&1 = 0
  1&1 = 1
*/
printf("按位与运算 i&j = %d \n",i&j);  
/** 
i = 0101;j=0110 
	0101
  | 0110
  --------
    0111 = 7

  0|0 = 0
  1|0 = 1
  0|1 = 1
  1|1 = 1
*/
printf("按位或运算 i|j = %d \n",i|j);
/** 
i = 0101;j=0110 
	0101
  | 0110
  --------
    0011 = 12

  0^0 = 0
  1^0 = 1
  0^1 = 1
  1^1 = 0
*/
printf("按位亦或运算 i^j = %d \n",i^j);
/** 
i = 0101;j=0110 
	0101
  | 0110
  --------
    0011 = 12

  0^0 = 0
  1^0 = 1
  0^1 = 1
  1^1 = 0
*/
printf("按位运算 i^j = %d \n",i^j);
/** 
	按二进制+1 取反
	i = 0000000....0101;     j=000000000.....0110 
        0000000....0101 +1     00000000.....0110 +1
		0000000....0110 = 6    00000000.....0111 = 7
		-6                      -7
**/
printf("按位取反运算 ~i = %d \n",~i);
printf("按位取反运算 ~j = %d \n",~j);
/**
	移位运算
	i<<2 把i的所有二进制左移2位,右边补0(左移n位,相当于乘以2的n次方)
	1)i=i*4;
	2)i=i>>2;
	2的速度远远大于1的速度。
	i=0000000....0101; 
	i=0000000..010100   --   0001 0100  = 16+4 = 20
	
	j>>2 把j的所有二进制右移2位,左边补0{左边最高位如果是1就补1,左边最高位是0就补0;符号位不变,左边补上符号位}
		(右移n位,相当于除以2的n次方{前提不能溢出,否则数据会丢失})
	1)j=j/4;
	2)j=j<<2;
	2的速度远远大于1的速度。
	j=000000000.....0110; 
	j=000000000.....0001   --   0000 0001  = 1 = 1
**/
printf("按位左移运算 i<<2 = %d \n",i<<2);
printf("按位右移运算 j>>2 = %d \n",j>>2);

/**
	另外java中 >>> 代表无符号移动
	忽略了符号位扩展,0补最高位
    无符号右移运算符>>> 只是对32位和64位的值有意义
**/
return 0;

}

转载于:https://my.oschina.net/louchen/blog/156158

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值