位运算练习

课后练习:

1、2*8的最高效的实现方式.
//2的二进制表示形式为 0010  16的二进制表示形式为 1111 通过左移4位可以实现 2*8 
int main(void)
{
    printf("%d",4 << 2);// 8 << 1
}

2、如何通过位运算判断一个数是奇数还是偶数?

//一个数如果是奇数的话,那么他的二进制最后一位一定为1. 跟1进行与运算 如果结果为0则为偶数 1则为奇数
//比如 8和1  1000 & 0001 -> 0000
// 7和1 0111 & 0001 ->0001
代码:
int main(void)
{
    int i = 0;
    int flag = 0;
    scanf_s("%d",&i);
    if(flag == (i & 1)){
       printf("偶数"); 
    }else
    {
        printf("奇数")
    }
}

3、如何读取二进制数中的某一位的值?

/*比如说
8位二进制数A:
1000 1000
如果你想获A的哪一位,就把数字B:
0000 0000的那一为设置为1.
比如说,我想获得A的第三位
就把B的第三位数字设置为1,则B为
0000 0100,之后A、B求与,
结果若为0,说明A的第三位为0,结果为1,说明A的第三位为1.
同理:若要获得A的第五位,
就把B设置为
0001 0000.
之后再求与。
通常在程序中
数字B被称为掩码,就是专门用来测试某一位是否为0的数值.*/
#include <stdio.h>
int fun(int x, int n);
int main(void)
{
	int k = fun(0,8);
	printf("%d",k);
	getchar();
	return 0;
}

int fun(int x, int n)
{
//要取第n位值:(x>>(n-1))&1
  return (x>>(n-1))&1;
}

4、如何设置二进制数中的某一位的值?

设置第n位值:
    设置相反:x^(1<<n-1)
    设置为1:x | (1<<n-1)
    设置为0:对应位为0其余位为1

5.设 int a = 2; int b = 5; 使用位运算,交换两个变量的值,并打印。

int main(void)
{
    a=a^b;   
	b=b^a;     
	a=a^b;
	printf("%d %d",a, b);
}

6.使用位运算 获取 int 类型的最大值和最小值,并打印

int main(void)
{
 printf("int最大值%p 最小值%p \n",(unsigned int)(~0),(unsigned int)(0));   
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值