c 语言位操作

位操作符:

1、位与 &

2、位或 |

3、位异或  ^

4、位取反 ~

5、左移位 <<    右移位   >>


     (3)从真值表可以看出:位或操作的特点是,只有0和0位或的结果是0,其余全是1.

  (4)位或和逻辑或的区别:位或时两个操作数是按照二进制位彼此对应为相或的,逻辑或是两个操作数作为整体来相或的。


#include<stdio.h>
#include<stdlib.h>
int main(void)
{
	int a = 45;
	int b;
	int c;
	b = ~a;
	c = !a;
	printf("b=%d\n",b);
	printf("c=%d\n",c);
	system("pause");
	return 0;
}




#include<stdio.h>
#include<stdlib.h>
int main(void)
{
	unsigned int a = 45;                             // a:101101
	unsigned int b = 23;                             // b:010111
	unsigned int c;                                  // c:111010
	c = a^b;
	printf("c=%d\n",c);
	system("pause");
	return 0;
}







 注意最后一条,有符号数,右移位左侧补符号位





4.2.2.5、举例:

(1)我们需要一个bit3~bit7为1(隐含意思就是其他位为0)的二进制数我们可以这样做:(0x1f << 3).

(2)更难的要求,获取bit3~bit7为1,同时bit23~bit25为1,其余位为0

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
	unsigned int a ;
	a =( (0x1f << 3)|(0x7 << 23));
	printf("a=0x%x\n",a);
	system("pause");
	return 0;
}


(3)获取bit4~bit10为0,其余为1.

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
	unsigned int a ;
	a = ~(0x7f<<4);
	printf("a=0x%x\n",a);
	system("pause");
	return 0;
}



4.2.2.6、位运算实战演练:



(1)a | = (1 << 3);

(2)a |= (0x1f << 3);

(3)a &= (~(1 << 15));

(4)a &= (~(0x1ff<< 15));

(5)

(6)

要明白置1和赋值都是用位或。赋值之前要把原来的数清除。


(7)



(8)


//备注:第七题和第八题的0x3ff是误写,真实的是0x7ff.














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值