我写了两个程序,程序的功能都是一样的,对于一个byte(unsigned char)类型,申明一个变量,给变量赋值'a',取其高4位和低4位的值,分别存入bH和bL变量,请各位高手各抒己见,看看那种方案效率高,如果能提出更好的方案,请不吝赐教,谢谢!
方案一源代码:
/* BitOpr1.cpp */
#include <stdio.h>
#include <mem.h>
#define BYTE unsigned char
typedef struct {
BYTE bit0 : 1;
BYTE bit1 : 1;
BYTE bit2 : 1;
BYTE bit3 : 1;
BYTE bit4 : 1;
BYTE bit5 : 1;
BYTE bit6 : 1;
BYTE bit7 : 1;
} byte_t;
BYTE tbl[] = {0x08, 0x04, 0x02, 0x01};
inline
BYTE bitH(byte_t value) {
return value.bit7 * tbl[0] + value.bit6 * tbl[1] +
value.bit5 * tbl[2] + value.bit4 * tbl[3]
;
}
inline
BYTE bitL(byte_t value) {
return value.bit3 * tbl[0] + value.bit2 * tbl[1] +
value.bit1 * tbl[2] + value.bit0 * tbl[3]
;
}
int main() {
BYTE bH, bL;
byte_t c;
/* c = 'a' */
memset(&c,97,1);
/* fetch high bit and low bit */
bH = bitH(c);
bL = bitL(c);
/* output */
printf("%c : bH = %#x , bL = %#x\n",c,bH,bL);
return 0;
}
方案二源代码:
/* BitOpr2.cpp */
#include <stdio.h>
int main() {
unsigned char c = 97;
unsigned char bH, bL;
bH = c >> 4;
bL = (c << 4);
bL >>= 4;
printf("%c : bH = %#x bL = %#x\n",c,bH,bL);
return 0;
}
[此贴子已经被作者于2006-6-29 18:25:41编辑过]