求助c语言编写一个字节位互换

[复制链接]
查看11 | 回复4 | 2012-4-28 10:30:45 | 显示全部楼层 |阅读模式
题目很简单,但考察的是面试者的编程习惯和态度。今天闲来无事,多说几句。题目理解为高半字节和低半字节互换:
最好用宏定义 #defineCHG_BYTE(bData) (((bData)>4))
注意,1、这种底层操作一般用宏可以增强程序的效率,避免不必要的函数调用开销;2、宏定义最好用大写;3、参数一定要用();4、参数前加个b说明书字节类型的,5、宏定义望文生义,光看名称就知道用途。以上几点说明你有一个好习惯,会给面试官留下好印象。
或者用函数,也要注意函数的书写格式BYTE ChgByte(BYTE bData){
return (bData>4);...
回复

使用道具 举报

千问 | 2012-4-28 10:30:45 | 显示全部楼层
怎么换?右移>>左移>4高位去低位,再位或|得到新BYTE void main(){unsigned char ch,ch1,ch2;scanf("%c",&ch);ch1 = (ch&0x08)>>1;ch2 = (ch&0x04)>1) & 0x55;
x = (x & 0x33) >2) & 0x33;
x = (x & 0x0F) >4) ...
回复

使用道具 举报

千问 | 2012-4-28 10:30:45 | 显示全部楼层
支持任意两位互换. 运行结果:00000110 /* 输入数字, 23位是1 45位是0 */00001010 /* 34互换后 */00011000 /* 25也互换后 */代码:#include unsigned char mask(int n){
return 1 << (n-1);}void set...
回复

使用道具 举报

千问 | 2012-4-28 10:30:45 | 显示全部楼层
比如你要第二位和第三位互换,用00000010和00000100按位与把2,3位提取出来保存,保存的字节再用移位二位的移到3位,3位的移到二位,再把原字节和11111001相与,把2,3位变为了0,再跟前面提取并移位后的两个结果相异或就得到结果了 ~取非,&按位与,|按位或,异或用(~a&b)|(~b&a)...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行