, . , , 1 . () 0. .
, .
, :
Unsigned char a, b;
a = 0x10; // a = 0b00010000
b = 0x30; // b = 0b00110000
:
Var = 1 << Num;
:
Unsigned char a;
a = 1 << 4; // a = 0b00010000
:
Var = (1<<Num1)|(1<<Num2)|...|(1<<NumN);
:
Unsigned char a;
a = (1 << 5)|(1 << 4); // a = 0b00110000
, "", :
Unsigned char a, mask;
mask = 0x30; // mask = 0b00110000
a = 0x03; // a = 0b00000011
a = a | mask; // a = 0b00110011
−
Var = Var | (1 << Num);
Var |= (1 << Num);
:
Var |= (1<<Num1)|(1<<Num2)|...|(1<<NumN);
:
Unsigned char a;
a = 0x03; // a = 0b00000011
a |= (1 << 4)|(1 << 5); // a = 0b00110011
:
Var = Var & ~(1 << Num);
:
Var &= ~(1 << Num);
:
Var &= ~((1<<Num1)|(1<<Num2)|...|(1<<NumN));
:
Unsigned char a;
a = 0x87; // a = 0b10000111
a &= ~((1 << 1)|(1 << 2)); // a = 0b10000001
|
|
"" , .
:
Unsigned char a, mask;
mask = 0xF9; // mask = 0b11111001
a = 0x87; // a = 0b10000111
a = a & mask; // a = 0b10000001
Ȼ :
Var ^= (1 << Num);
:
Var ^= (1<<Num1)|(1<<Num2)|...|(1<<NumN);
:
Unsigned char a, b;
a = 0x87; // a = 0b10000111
a ^= (1 << 7); // a = 0b00000111
b = 0x87; // b = 0b10000111
b ^= (1 << 7)|(1 << 1); // b = 0b00000101
, ,
if ((Var & (1<<Num))!= 0){
// , Num Var
}
if ((Var & (1<<Num)) == 0){
// , Num Var
}
, , .
:
Var = (Var << 4)|(Var >> 4);
, . . Ȼ .
#define , . , , , , , . #define :
#define
#define ( )
.
:
#define MIN 10
#define MAX (MIN+20)
MIN 10, MAX (10+20) . , , , . , a = MAX*5 a = 10+20*7, a = (10+20)*7, .
, . , , , , #define. , , .
, .
|
|
, PORTA,
#define P_KEY PORTA
P_KEY. - , #define, .
,
#define MASK ((1 << 1)|(1 << 2))
#define. , . , .
, .
:
#define MAX(x,y) (((x)>(y))?(x):(y))
a = MAX(i,f);
a = (((i)>(f)?(i):(f));
, , , , .
, . .
:
#define BitSet(var, bit) ((var) |= (1<<(bit)))
:
BitSet(PORTA,5); // 5- PORT
:
#define BitClr(var, bit) ((var) &= (~(1<<(bit))))
:
BitClr(PORTC,4); // 4- PORTC
:
#define BitInv(var, bit) ((var) ^= (1<<(bit))
:
BitInv(PORTB,1); // 1- PORTB
1, 1:
#define BitIsSet(var, bit) ((var & (1<<bit))!= 0)
:
if(BitIsSet(PORTB,1)){ if};
1, 0:
#define BitIsClr(var, bit) ((var & (1<<bit)) == 0)
:
if(BitIsClr(PORTB,1)){ if};
(, macros.h) . , .