2016-09-10 3 views
2
unsigned char Flags; 

Какое значение хранится каждый шаг в Флаге, если флаг имеет значение по умолчанию при включении питания i.e 0?Нужна определенная ясность в отношении этого

Flags |=0x04; //Flags =  What will be stored here? 
Flags &= 0xfe; //Flags =  What will be stored here after bitwise operation? 

Что делает это, если заявление?

if(Flags & 0x01) 
{ 
    //When will it enter into this conditional? 
} 
+1

Флаги не могут иметь нулевое значение или значение ничто. Вы имели в виду 0? – 2501

+0

Да. Значение по умолчанию при включении питания. –

+1

Это будет проверка последнего бит i.e, если это '0' или' 1'. – ameyCU

ответ

2

Если Flags &= 0xfe последняя операция перед тем if(Flags & 0x01) выражение всегда будет false, поэтому условный не будет введен.

Это потому, что 0xfe маска 11111110 и 0x01 маска проверяет наименее значимый бит, который всегда будет равна нулю.

1

В бинарных значений:

unsigned char Flags; // Flags = ????????; 

Flags |=0x04; // Flags = ?????1?? 

Flags &= 0xfe; // Flags = ?????1?0 

Тогда if(Flags & 0x01) всегда false с каким-либо начальным значением. , поскольку ?????1?0 & 00000001 является 00000000

+0

Вы должны добавить инициализацию в 'someValue' для' Flags', чтобы избежать возможного недоразумения в отношении неопределенного поведения. –