C语言实现按位倒序

本文探讨如何使用C语言实现字节的按位倒序操作,以0xE1为例,通过指针实现将最高位变为最低位。此外,文章提及利用结构体和联合体,以及通过与或运算和栈操作也能达到相同目的,这些方法值得进一步研究。

最近遇到了一个编程问题,怎样使得一个字节的数据实现按位倒序?
举例:0xE1按位倒序的话就是0x87,0x81按位倒序还是0x81
说明:最高位变成最低位,次高位变成次低位。依次类推,,,,
现在用指针来实现,代码如下:

#include <stdio.h>
struct group{
	unsigned char bit0:1;
	unsigned char bit1:1;
	unsigned char bit2:1;
	unsigned char bit3:1;
	unsigned char bit4:1;
	unsigned char bit5:1;
	unsigned char bit6:1;
	unsigned char bit7:1;
};
union{
	struct group bit;
	unsigned char data;
}fit;
int main(int argc, char ** argv)
{
	union fit;
	fit.data = 0xE1;
	unsigned tmp;

	//exchange
	tmp = fit.bit.bit0;
	fit.bit.bit0 = fit.bit.bit7;
	fit.bit.bit7 = tmp;
	tmp = fit.bit.bit1;
	fit.bit.bit1 = fit.bit.bit6;
	fit.bit.bit6 = tmp;
	tmp = fit.bit.bit2;
	fit.bit.bit2 = fit.bit.bit5;
	fit.bit.bit5 = tmp;
	tmp = fit.bit.bit3;
	fit.bit.bit3 = fit.bit.bit4;
	fit.bit.bit4 = tmp;

	printf("data:0x%x\n",fit.data);	
	return 0;
}

结果如下:
在这里插入图片描述
由此可见,代码成功的将0xE1转变为0x87。实现倒序其实有很多方法,但我想说的是这种转变的思想:
巧妙的使用结构体和联合体的方式去实现字节倒序
这种方法是可以去深入讨论的,另外还可以通过与或运算入栈出栈的方式实现。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值