寄存器操作
来源:互联网 发布:矩阵张量积 编辑:程序博客网 时间:2024/05/18 21:48
假设在一个32位的机器上,需要将某个外设寄存器的第X位(最低位为第0位,最高位为第31位)设置成0,将第Y位开始的连续三位设置成110(从高位到低位的顺序),而其它位保持不变。对给定的寄存器值R,及X,Y,编程计算更改后的寄存器值R。
输入的数据仅一行,包括R,X,Y,以逗号","分隔,R为16进制表示的32位整数,X,Y在0-31之间且Y>=3,(Y-X)的绝对值>=3,保证两次置位不会重合更改后的寄存器值R(16进制输出)。例如:
输入:
12345678,0,3
输出:
还看到了另外一个人的答案,我对他的答案很好奇,我认为他是错的,结果运行了几次,发现他和我的答案是一样的,我认为或运算是不能置0的,只能置1。下面是他的代码
输入的数据仅一行,包括R,X,Y,以逗号","分隔,R为16进制表示的32位整数,X,Y在0-31之间且Y>=3,(Y-X)的绝对值>=3,保证两次置位不会重合更改后的寄存器值R(16进制输出)。例如:
输入:
12345678,0,3
输出:
1234567c
/************************************************************************* > File Name: a.c > Author: 傻李 > Mail: hellojukay@gmail.com > Created Time: 2014年11月15日 星期六 18时37分42秒 ************************************************************************/#include<stdio.h>void print(int);int main(){int R;int x,y;scanf("%x,%d,%d",&R,&x,&y);//第x位置0print(R);x = x &(~ (1UL << x));//Y位开始连续3位置110R = R | (1UL << y);R = R | (1UL << (y-1));R = R &(~ (1UL << (y-2)));printf("%x\n",R);print(R);return 0;}void print(int c){if(c>>1)print(c>>1);printf("%d",c&1);}
还看到了另外一个人的答案,我对他的答案很好奇,我认为他是错的,结果运行了几次,发现他和我的答案是一样的,我认为或运算是不能置0的,只能置1。下面是他的代码
#include <stdio.h> #define CLR(r, x) r &= ~(1UL << x) //1UL表示32位无符号数,将r的x位清零。 #define SET(r, y) r |= (1UL << y) //表示将r的y位置零 int main() { int r, x, y; scanf("%x,%d,%d", &r,&x, &y); CLR(r,x); //清除x位 SET(r,y); //置位y位 SET(r,y-1); //置位y-1位 CLR(r,y-2); //置位y-2位 printf("%x", r); return 0; }
0 0
- 寄存器操作
- 寄存器操作
- 寄存器操作
- stm32 BKP寄存器操作[操作寄存器+库函数]
- stm32 BKP寄存器操作[操作寄存器+库函数]
- stm32 BKP寄存器操作[操作寄存器+库函数]
- 寄存器操作的方法
- Modbus协议寄存器操作
- STM32串口寄存器操作
- STM32 CRC寄存器操作
- ads1115寄存器操作
- mmap操作arm寄存器
- STM32串口寄存器操作
- 寄存器绝对地址操作
- 裸机寄存器操作
- CPU寄存器操作方式
- STM8 寄存器操作GPIO
- 寄存器位写操作
- 循环-10. 求序列前N项和
- win8.1 up1 64位下安装 64位的Ubuntu14.10
- [Leetcode]Partition List
- ext2文件系统
- pl*sql基础(三)之函数
- 寄存器操作
- HDU—— 1029 Ignatius and the Princess IV
- Python学习笔记(—):初识python
- 一个未来程序猿的诞生
- Backbine.js实战第七章----导航控制器
- hdu2602 01背包问题
- android之实现底部TabHost
- cobol学习之七逆向输出
- Qt的模型/视图/委托知识点