#include <stdio.h>
/*
* 函数:reverse_4bit
* 功能:将输入的4位二进制数(0-15)的位顺序反转
* 输入:num (0-15)
* 输出:反转后的数值
*/
unsigned char reverse_4bit(unsigned char num)
{
unsigned char result = 0;
/* 分别取出每一位,放到镜像位置 */
if (num & 0x01) result |= 0x08; /* Bit 0 -> Bit 3 */
if (num & 0x02) result |= 0x04; /* Bit 1 -> Bit 2 */
if (num & 0x04) result |= 0x02; /* Bit 2 -> Bit 1 */
if (num & 0x08) result |= 0x01; /* Bit 3 -> Bit 0 */
return result;
}
/* 辅助函数:用于打印4位二进制格式 (C89兼容) */
void print_binary(unsigned char num)
{
unsigned char mask;
for (mask = 0x08; mask > 0; mask >>= 1) {
if (num & mask) {
putchar('1');
} else {
putchar('0');
}
}
}
void main(void)
{
unsigned char i;
unsigned char reversed_val;
/* 遍历1到15 */
for (i = 1; i <= 15; i++) {
reversed_val = reverse_4bit(i);
/* 打印结果,格式:原值(二进制) -> 结果(二进制) */
/* 注意:Keil C51环境中printf通常需要重定向串口才能在电脑看到,
这里仅展示逻辑,实际使用请根据具体硬件环境调整输出方式 */
printf("%d (", (int)i);
print_binary(i);
printf(") -> %d (", (int)reversed_val);
print_binary(reversed_val);
printf(")\r\n");
}
while(1); /* 程序死循环,防止跑飞 */
}
GLM-4.7给出的答案 |