K11836 位操作

81 篇文章 0 订阅
8 篇文章 0 订阅
该问题描述了一个在32位系统中编程修改特定寄存器位的场景,要求将指定位设为0,以及将一段连续三位设为110,同时保持其他位不变。给定输入包括原始寄存器值、要修改的位位置,程序需要返回更新后的寄存器值。提供的AC代码示例展示了如何使用位操作实现这一功能。
摘要由CSDN通过智能技术生成

题目描述

假设你工作在一个32位的机器上,你需要将某一个外设寄存器的第X位设置成0(最低位为第0位,最高位为第31位),将第Y位开始的连续三位设置成110(从高位到低位的顺序),而其他位保持不变。对给定的寄存器值R,及X,Y,编程计算更改后的寄存器值R。

输入格式

1行:仅一行,包括R,X,Y,以逗号","分隔,R为16进制表示的32位整数,X,Y在0-31之间且Y>=3,(Y-X)的绝对值>=3,保证两次置位不会重合。

输出格式

1行:更改后的寄存器值R(16进制输出)

输入输出样例

输入样例1:
 
12345678,0,3
输出样例1:
 
1234567c

说明

输入输出十六进制数r用scanf("%x ",&r); printf("%x",r);

【耗时限制】1000ms 【内存限制】128MB

AC代码:

//
//Created by Carlgood.
//
//Note:This program is written in version DEV-C++ 5.11.
//Subject source:"hppt://oj.codingle.cn"
# include <iostream>
# include<cmath>
# include<string>
# include<cstring>
# include<cstdio>
# include<algorithm>
# include<sstream>
# define This_program_is_written_by_Carlgood_Programming_Studio 9876543210
using namespace std;
int main()
{
	int r,x,y;
	scanf("%x,%d,%d",&r,&x,&y);
	r&=~(1<<x);
	r|=(1<<y);
	y--;
	r|=(1<<y);
	y--;
	r&=~(1<<y);
	printf("%x",r);
	return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值