1<<0
бессмысленно, сдвиг 1 левого нулевого бита не имеет никакого эффекта.
1<<0 == 1
Ниже будет работать идентично
unsigned char A;
unsigned char B;
if(A & 1){
//testing
}
Это единственный&
, которая делает это побитовой операцией, а не операцией сдвига влево (<<
)
Если вы хотите проверить, например, бит 7, вы можете сделать это двумя способами:
if (A & 128) {
или
if (A & (1<<7)) {
В случае последнего, так как он использует постоянные значения, компилятор просто разогнал бы это до 128
и полностью исключил бы shl
, так что все довы, который вы хотели бы использовать в зависимости от кода и вашего стиля кодирования.