将一个数字的二进制位从左到右翻转

编写函数:unsigned int reverse_bit(unsigned int value);
这个函数的返回值value的二进制位模式从左到右翻转后的值。
如:在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
程序结果返回:2550136832

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdlib.h>
unsigned int reverse_bit(unsigned int value)
{
	int i = 0;
	unsigned int sum = 0;
	for (i = 0; i < 32; i++)
	{
		sum += ((value >> i)&1)<<(31-i);
	}
	value = sum;

	return value;
}
int main()
{
	int num = 0;
	printf("请输入你要翻转的数字:");
	scanf("%d", &num);
	unsigned int ret = reverse_bit(num);
	printf("%u\n", ret);
	
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验五-键盘扫描实验-实验报告全文共3页,当前为第1页。实验五-键盘扫描实验-实验报告全文共3页,当前为第1页。键盘扫描实验 实验报告 实验五-键盘扫描实验-实验报告全文共3页,当前为第1页。 实验五-键盘扫描实验-实验报告全文共3页,当前为第1页。 一、实验目的 1. 掌握线反转法键盘扫描原理。 2. 了解单片机的输入和输出过程,理解单片机的数据采集过程。 二、实验内容 单片机外接4x4键盘,通过线反转法判断按下的键,并在码管上显示按键对应的数字。 第一行从左到右分别是开关K0, K1, K2, K3,第二行从左到右分别是K4, K5, K6, K7以此类推。当按下Kn时,在码管上显示数字n。 三、实验原理 线翻转法:先对行(R0-R3)置0,对列(R4-R7)置1。当有键被按下时,会把按键所在的列的电位从1变0,记录下位置;然后再将行列翻转,记录下按下键的所在行,两进行或运算,就可以得到一个唯一表示按下键的数字。 例如:假定R0-R7分别与单片机的P2.0-P2.7相连。先把R4-R7置1,R0-R3置0(通过指令MOV P2, #0F0H实现)。当键K5被按下时,R5电位被拉低为低电平。此时,P2口表示的为:1101 0000(0xD0);然后再置R4-R7为0,R0-R3为1,此时,R1电位被拉低为低电平,此时,P2口表示的为:0000 1101(0x0D)。将两相与取反,得到:0010 0010。如此类推,可以把十六个开关和得到的数字的关系计算出来,如下表: 对应开关 二进制 十六进制 对应开关 二进制 十六进制 K0 0001 0001 0x11 K8 0001 0100 0x14 K1 0010 0001 0x21 K9 0010 0100 0x24 K2 0100 0001 0x41 K10 0100 0100 0x44 K3 1000 0001 0x81 K11 1000 0100 0x84 K4 0001 0010 0x12 K12 0001 1000 0x18 K5 0010 0010 0x22 K13 0010 1000 0x28 K6 0100 0010 0x42 K14 0100 1000 0x48 K7 1000 0010 0x82 K15 1000 1000 0x88 实验五-键盘扫描实验-实验报告全文共3页,当前为第2页。实验五-键盘扫描实验-实验报告全文共3页,当前为第2页。四、实验过程 实验五-键盘扫描实验-实验报告全文共3页,当前为第2页。 实验五-键盘扫描实验-实验报告全文共3页,当前为第2页。 1. 连接好单片机及其外围设备电路 实验五-键盘扫描实验-实验报告全文共3页,当前为第3页。实验五-键盘扫描实验-实验报告全文共3页,当前为第3页。 2. 编写汇编程序 实验五-键盘扫描实验-实验报告全文共3页,当前为第3页。 实验五-键盘扫描实验-实验报告全文共3页,当前为第3页。 ORG LJMP Key LJMP K7: CJNE R2, #82H, K8 ORG 0100H MOV P0, #0F8H Init: CLR P1.3 LJMP Key MOV P0, #0C0H K8: CJNE R2, #14H, K9 Key: MOV P2, #0F0H MOV P0, #080H MOV A, P2 LJMP Key MOV R1, A K9: CJNE R2, #24H, K10 MOV P2, #0FH MOV P0, #090H MOV A, P2 LJMP Key ORL A, R1 K10: CJNE R2, #44H, K11 CPL A MOV P0, #088H MOV R2, A LJMP Key JNZ KeyPro K11: CJNE R2, #84H, K12 LJMP Key MOV P0, #083H KeyPro: CJNE R2, #11H, K1 LJMP Key MOV P0, #0C0H K12: CJNE R2, #18H, K13 LJMP Key MOV P0, #0C6H K1: CJNE R2, #21H, K2 LJMP Key MOV P0, #0F9H K13: CJNE R2, #28H, K14 LJMP Key MOV P0, #0A1H K2: CJNE R2, #41H, K3 LJMP Key MOV P0, #0A4H K14: CJNE R2, #48H, K15 LJMP Key MOV P0, #086H K3: CJNE R2, #81H, K4 LJMP Key MOV P0, #0B0H K15: CJNE R2, #88H, K16 LJMP Key MOV P0, #08EH K4:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值