I am working on a nixie clock. In 12 hour mode I want to blank the leading zero.
This code does not work:
if (hours & 0b00010000 == 0) // check to see if the hours = 10, 11, or 12
{
hoursOut = hours | leadzeroblank; //if it is not 10, 11, or 12 blank the leading zero
}
else
{
hoursOut = hours;
// Serial.println(hours,BIN);
}
and this code does work:
byte tens = hours & 0b00010000; // mask the least sig byte of the 10's data
if (tens == 0) // check to see if the hours = 10, 11, or 12
{
hoursOut = hours | leadzeroblank; //if it is not 10, 11, or 12 blank the leading zero
}
else
{
hoursOut = hours;
}
Anyone have any idea why the first set of code does not give me the desired result?
What I am trying to do is check for the MSB of my hours data being equal to 1 as in 10, 11, or 12 o'clock.
If it is not then I send a code to my nixie driver that it can not understand and it blanks the digit.
First code does not work and the second set does. There is something wrong with the IF statement.
and I do not know what is wrong.
if ((hours & 0b00010000) == 0) // check to see if the hours = 10, 11, or 12
{
hoursOut = hours | leadzeroblank; //if it is not 10, 11, or 12 blank the leading zero
}
else
{
hoursOut = hours;
// Serial.println(hours,BIN);
}
I can't remember the precedence off the top of my head, but & and == are both operators like + or *. You need to check precedence.
what is meant by the term precedence used in this discussion.
Precedence == order of evaluation.
Multiplication and division have higher precedence than addition and subtraction, so you can write:
int y = 7 * 4 + 9;
and know that the 7 * 4 will be performed, and then 9 will be added, as opposed to 4 and 9 being added, then multiplied by 4.
Your assignment now is to find the where modulo (%), logical and (&) and logical or (|) fit with respect to multiplication/division and addition/subtraction.
I always use parentheses for things like this. I'd rather spend a couple of seconds making absolutely sure evaluations go the way I intend than hours trying to figure out what went wrong. Bitter experience speaking here.