位运算 取指定位与大小写字母转换应用

概念:位运算是指按二进制进行的运算。

一共6种

一. 按位与

&
双目运算符
结合性:自左至右
相应的二进制位都为1,则该位的结果值为1;否则为0。

0&0=0,0&1=0,1&0=0,1&1=1
如:3&5
· 00000011(3)
&00000101(5)
————————
· 00000001 (1)

用途:取一个数中某些指定位;清零

二.按位或

|
双目运算符
结合性:自左至右
相应的二进制位中只要有一个为1,该位的结果值为1。

0|0=0,0|1=1,1|0=1,1|1=1
· 00000011(3)
| 00000101(5)
————————
· 00000111 (7)

三.按位异或

^ (也称XOR运算符)
双目运算符
结合性:自左至右
同号为假 0 异号为真 1
0^0=0
0^1=1
1^0=1
1^1=0

应用:
1.使特定位翻转
2.与0异或,保留原值
3.交换两值,不用临时变量

交换两值:
除了
a=a+b
b=a-b
a=a-b;
还可以
a=a^b
b=b^a
a=a^b;

四.取反

~
单目运算
结合性:自右至左
0变1,1变0

五.左移

(<<)
双目运算
结合性:自右至左
将一个数的二进制位全部左移若干位

a=<<3
把a的二进制数左移3位,右边补0,高位左移溢出后舍弃

左移一位等于乘2,两位 乘4,三位 乘8
左移n位等于乘2的n次方,n是有范围的
(此结论只适用于左移溢出的高位中不包含1)

因为计算机对数的读取范围有限

六.右移

(>>)
双目运算
结合性:自右至左
将一个数的二进制位全部左移若干位

a=>>3
把a的二进制数右移3位,高位补0,低位溢出后舍弃
右移一位等于除2,两位 除4,三位 除8
右移n位等于除2的n次方,n是有范围的

/*取某数的指定位,这个为取2~4位*/
#include <stdio.h>
int main (void)
{
	int a, b, c, d;
	
	printf("请输入待检验数字: ");
 	scanf("%d", &a);
 	b = a>>2;
 	c = ~(~0 << 5);
 	d = b & c;
 	
 	printf("%d\n", d);
}
/*大小写字母的转换,用到位运算的*/
#include<stdio.h>
#include<conio.h>

int main(void)
{
	char ch,temp;
 	printf("请输入一个字母:\n");
 	ch = getchar();
 	temp = getchar();
 	
	while (!(ch > 'A'||ch < 'z') || (ch > 'Z'&&ch < 'a'))
	{
		printf("输入有误,请重新输入一个字母:\n");
  		ch = getchar();
	}
	if(ch>'a'&&ch<'z')
	{
		ch = ch & 223;			//使第五位为0,变大写
 	}
 	else
 	{
 		ch = ch|255;			//使第五位为1,变小写
	}
	putchar(ch);

	ch = getchar(); 			//可以为printf(“\n”);
 	putchar(ch);
 }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值