锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
{ 浣嶅煙鍒楄〃 };
鍏朵腑浣嶅煙鍒楄〃鐨勫艦寮忎負錛?綾誨瀷璇存槑絎?浣嶅煙鍚嶏細浣嶅煙闀垮害
渚嬪錛?
struct bs
{
int a:8;
int b:2;
int c:6;
};
浣嶅煙鍙橀噺鐨勮鏄庝笌緇撴瀯鍙橀噺璇存槑鐨勬柟寮忕浉鍚屻?鍙噰鐢ㄥ厛瀹氫箟鍚庤鏄庯紝鍚屾椂瀹氫箟璇存槑鎴栬呯洿鎺ヨ鏄庤繖涓夌鏂瑰紡銆備緥濡傦細
struct bs
{
int a:8;
int b:2;
int c:6;
}data;
璇存槑data涓篵s鍙橀噺錛屽叡鍗犱袱涓瓧鑺傘傚叾涓綅鍩焌鍗?浣嶏紝浣嶅煙b鍗?浣嶏紝浣嶅煙c鍗?浣嶃傚浜庝綅鍩熺殑瀹氫箟灝氭湁浠ヤ笅鍑犵偣璇存槑錛?br>
1. 涓涓綅鍩熷繀欏誨瓨鍌ㄥ湪鍚屼竴涓瓧鑺備腑錛屼笉鑳借法涓や釜瀛楄妭銆傚涓涓瓧鑺傛墍鍓╃┖闂翠笉澶熷瓨鏀懼彟涓浣嶅煙鏃訛紝搴斾粠涓嬩竴鍗曞厓璧峰瓨鏀捐浣嶅煙銆備篃鍙互鏈夋剰浣挎煇浣嶅煙浠庝笅涓鍗曞厓寮濮嬨備緥濡傦細
struct bs
{
unsigned a:4
unsigned :0 /*絀哄煙*/
unsigned b:4 /*浠庝笅涓鍗曞厓寮濮嬪瓨鏀?/
unsigned c:4
}
鍦ㄨ繖涓綅鍩熷畾涔変腑錛宎鍗犵涓瀛楄妭鐨?浣嶏紝鍚?浣嶅~0琛ㄧず涓嶄嬌鐢紝b浠庣浜屽瓧鑺傚紑濮嬶紝鍗犵敤4浣嶏紝c鍗犵敤4浣嶃?br>
2. 鐢變簬浣嶅煙涓嶅厑璁歌法涓や釜瀛楄妭錛屽洜姝や綅鍩熺殑闀垮害涓嶈兘澶т簬涓涓瓧鑺傜殑闀垮害錛屼篃灝辨槸璇翠笉鑳借秴榪?浣嶄簩榪涗綅銆?br>
3. 浣嶅煙鍙互鏃犱綅鍩熷悕錛岃繖鏃跺畠鍙敤鏉ヤ綔濉厖鎴栬皟鏁翠綅緗傛棤鍚嶇殑浣嶅煙鏄笉鑳戒嬌鐢ㄧ殑銆備緥濡傦細
struct k
{
int a:1
int :2 /*璇?浣嶄笉鑳戒嬌鐢?/
int b:3
int c:2
};
浠庝互涓婂垎鏋愬彲浠ョ湅鍑猴紝浣嶅煙鍦ㄦ湰璐ㄤ笂灝辨槸涓縐嶇粨鏋勭被鍨嬶紝 涓嶈繃鍏舵垚鍛樻槸鎸変簩榪涗綅鍒嗛厤鐨勩?br>
浜屻佷綅鍩熺殑浣跨敤浣嶅煙鐨勪嬌鐢ㄥ拰緇撴瀯鎴愬憳鐨勪嬌鐢ㄧ浉鍚岋紝鍏朵竴鑸艦寮忎負錛?浣嶅煙鍙橀噺鍚?#183;浣嶅煙鍚?浣嶅煙鍏佽鐢ㄥ悇縐嶆牸寮忚緭鍑恒?br>main(){
struct bs
{
unsigned a:1;
unsigned b:3;
unsigned c:4;
} bit,*pbit;
bit.a=1;
bit.b=7;
bit.c=15;
printf("%d,%d,%d\n",bit.a,bit.b,bit.c);
pbit=&bit;
pbit->a=0;
pbit->b&=3;
pbit->c|=1;
printf("%d,%d,%d\n",pbit->a,pbit->b,pbit->c);
}
涓婁緥紼嬪簭涓畾涔変簡浣嶅煙緇撴瀯bs錛屼笁涓綅鍩熶負a,b,c銆傝鏄庝簡bs綾誨瀷鐨勫彉閲廱it鍜屾寚鍚慴s綾誨瀷鐨勬寚閽堝彉閲弍bit銆傝繖琛ㄧず浣嶅煙涔熸槸鍙互浣跨敤鎸囬拡鐨勩?br>紼嬪簭鐨?銆?0銆?1涓夎鍒嗗埆緇欎笁涓綅鍩熻祴鍊箋? 搴旀敞鎰忚祴鍊間笉鑳借秴榪囪浣嶅煙鐨勫厑璁歌寖鍥?紼嬪簭絎?2琛屼互鏁村瀷閲忔牸寮忚緭鍑轟笁涓煙鐨勫唴瀹廣傜13琛屾妸浣嶅煙鍙橀噺bit鐨勫湴鍧閫佺粰鎸囬拡鍙橀噺pbit銆傜14琛岀敤鎸囬拡 鏂瑰紡緇欎綅鍩焌閲嶆柊璧嬪鹼紝璧嬩負0銆傜15琛屼嬌鐢ㄤ簡澶嶅悎鐨勪綅榪愮畻絎?&="錛?璇ヨ鐩稿綋浜庯細 pbit->b=pbit->b&3浣嶅煙b涓師鏈夊間負7錛屼笌3浣滄寜浣嶄笌榪愮畻鐨勭粨鏋滀負3(111&011=011,鍗佽繘鍒跺間負 3)銆傚悓鏍鳳紝紼嬪簭絎?6琛屼腑浣跨敤浜嗗鍚堜綅榪愮畻"|="錛?鐩稿綋浜庯細 pbit->c=pbit->c|1鍏剁粨鏋滀負15銆傜▼搴忕17琛岀敤鎸囬拡鏂瑰紡杈撳嚭浜嗚繖涓変釜鍩熺殑鍊箋?br>
]]>
4銆佺敱浜庢瘡涓皬鍐欏瓧姣嶇殑ASCII鍊兼瘮瀵瑰簲澶у啓瀛楁瘝澶?2錛岃灝嗗皬鍐欏瓧姣嶈漿鎹負澶у啓瀛楁瘝闇瑕佸皢絎叚浣嶈涓?錛屾墍浠ュ彲浠ョ敤
ch &=223
灝嗗皬鍐欏瓧姣嶈漿鎹負瀵瑰簲澶у啓瀛楁瘝錛堝綋鐒朵篃鍙互鐩存帴鍑忓幓32錛夛紱
鑰屽皢澶у啓瀛楁瘝杞崲涓哄搴斿皬鍐欏瓧姣嶏紝闇瑕佸皢絎叚浣嶈涓?錛屾墍浠ュ彲浠ョ敤
ch |= 32
灝嗗ぇ鍐欏瓧姣嶈漿鎹負瀵瑰簲灝忓啓瀛楁瘝錛堝綋鐒朵篃鍙互鐩存帴鍔?2錛?br>
]]>
a&b = b&a
a^b = b^a
緇撳悎寰?br>(a|b)|c = a|(b|c)
(a&b)&c = a&(b&c)
(a^b)^c = a^(b^c)
鍒嗛厤寰?鍏朵粬綾繪帹)
a&(b|c) = (a&b)|(a&c)
a^(b|c)=(a^b)|(a^c)
鍏朵粬
a|0 = a
a&1 = a
a&0 = 0
a^a = 0
a^0 =a
a|~a = 1
a&~a = 0
a&a = a
a|a = a
a|(a&b) = a
a&(a|b) = a
]]>
*x = *x ^ *y;
*y = *x ^ *y;
*x = *x ^ *y;
}
]]>
typedef unsigned char *byte_pointer;
void show_bytes(byte_pointer start, int len)
{
int i;
for(i= 0; i < len; i++)
{
printf("%.2x", start[i]);
}
printf("\n");
}
void show_int(int x)
{
show_bytes((byte_pointer)&x, sizeof(int));
}
void show_float(float x)
{
show_bytes((byte_pointer)&x, sizeof(float));
}
void show_pointer(void *x)
{
show_bytes((byte_pointer)&x,sizeof(void*)); //sizeof(void *)????
}
int main()
{
int ival = 10;
float fval = (float) ival;
int *pval = &ival;
show_int(ival);
show_float(fval);
show_pointer(pval);
return 0;
}