51单片机, 变量sbit如何转换成变量char 中的某一位,组成一个字节

如题,用51做一个拨码开关检测, IC有8个分散引脚,定义sbit位变量, 我需要把这8个引脚状态装入一个char型变量的某一位,组成的字节供其它函数调用,如何操作,请教!

sbit  K1 = P1^0;
sbit  K2 = P2^0;
sbit  K3 = P3^2;
sbit  K4 = P4^3;
sbit  K5 = P1^1;
sbit  K6 = P2^2;
sbit  K7 = P3^4;
sbit  K8 = P4^5;
extern unsigned char  U1;

void   key  (void)
{
  U1=~( K1 & 0x01 );
  .....?
}

1,直接位运算,把几个bit塞进一个字节,
char tmp = 0;
tmp |= K8; tmp <<= 1;
tmp |= K7; tmp << = 1; .......
2,定义个联合体,联合体的一个成员是一个字节,另一个是一个带位域的结构体,给结构体的每个成员分别赋值,然后取字节值。