【番外篇·C】移位的应用

1.设置a的bit3~bit7,保持其他位不变。

#include <stdio.h>

int main(int args, char** argv)
{
	// 给定一个整数
	int a = 7;	// 0b0111
	
	// 将bit3设为1
	a = (1<<3) | a;
	
	// 输出结果
	printf("a = %d\n", a);	// 15 0b1111
	
	return 0; 
}

2.给定一个整形数a,设置a的bit3~bit7,保持其他位不变。

#include <stdio.h>

int main(int args, char** argv)
{
	// 给定一个整数
	int a = 7;		// 0b00000111
	
	// 设置bit3~bit7为1
	a = (0b11111 << 3) | a;
	
	// 输出十进制 
	printf("a = %d\n", a);	// 255
	
	// 输出十六进制
	printf("a = 0x%x\n", a);	// ff 
	
	return 0;
}

3.给定一个整型数a,清除a的bit15(为0),保证其他位不变。

#include <stdio.h>

int main(int args, char** argv)
{
	// 给定一个整数
	int a = 0b1000000000000011;
                 	
	// 清除bit15为0
	a = a & (~(1 << 15));
	
	// 输出
	printf("a = %d", a);
	
	return 0; 
}

4.给定一个整形数a,清除a的bit15~bit23,保持其他位不变。

#include <stdio.h>

int main(int args, char** argv)
{
	// 给定一个整数
	int a = 0b111111111000000000000011;
                 	
	// 清除bit15~bit23为0
	a = a & (~(0b111111111 << 15));
	
	// 输出
	printf("a = %d", a);
	
	return 0; 
}

5.给定一个整形数a,取出a的bit3~bit8。

#include <stdio.h>

int main(int args, char** argv)
{
	// 给定一个整数
	int a = 0b10100101000;
                 	
	// 取出bit3~bit8 0b100101 = 37
	a = ((0b111111 << 3) & a) >> 3;
	
	// 输出
	printf("a = %d", a);
	
	return 0; 
}

6.用C语言给一个整形数的bit7~bit17赋值937(其余位不受影响)。

#include <stdio.h>

int main(int args, char** argv)
{
	// 给定一个整数
	int a = 0b10100110000010000000; // 680064
                         	
	// 给bit7~bit17赋值937 
	// 将10011000001 改为 01110101001 = 644224
	a = a & (~(0b11111111111 << 7)) | (937 << 7);
	
	// 输出
	printf("a = %d", a);
	
	return 0; 
}

7.用C语言将一个整形数的bit7~bit17中的值加17(其余位不受影响)。

#include <stdio.h>

int main(int args, char** argv)
{
	// 给定一个整数
	int a = 0b10100110000010000000; // 680064
                       	
	// 给bit7~bit17赋值+17
	// 将10011000001 改为 10011010010 = 682240
	a += (17 << 7);
	
	// 输出
	printf("a = %d", a);
	
	return 0; 
}

8.用C语言给一个整形数的bit7~bit17赋值937,同时给bit21~bit25赋值17

#include <stdio.h>

int main(int args, char** argv)
{
	// 给定一个整数
	int a = 0b10100110000010000000; // 680064
                       	
	// 给bit7~bit17赋值937,同时给bit21~bit25赋值17
	// 1)先改变bit7~bit17
	a = a & (~(0b11111111111 << 7)) | (937 << 7);
	
	// 2)后改变bit21~bit25
	a = a & (~(0b11111 << 21)) | (17 << 21);
	 
	// 输出
	printf("a = %d", a);
	
	return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值