Witam. Mój problem, czy raczej ciekawość, nie jest właściwie związana z językiem C, tylko z Arduino, którego język jest zasadniczo podobny do wspomnianego C. Ale przejdźmy do problemu. Otóż zbudowałem sobie prosty zegar na układzie DS1307 i zaprogramowałem go na podstawie kodu z combustory.com. Jednak w owym kodzie moją ciekawość wzbudziły następujące linijki:
I2C_WRITE(decToBcd(second) & 0x7f);
second = bcdToDec(I2C_READ() & 0x7f);
hour = bcdToDec(I2C_READ() & 0x3f);
Jaki jest sens zastosowania w tym przykładzie koniunkcji bitowej, skoro i tak zmienna przyjmie wartość z odczytu, lub do układu zostanie wysłana wartość wprowadzona przez użytkownika? O ile się nie mylę, będzie to wyglądało następująco:
I2C_WRITE(decToBcd(second) & 0x7f);
1111111|0x7f
11100|0x1c
-------|----
11100|
second = bcdToDec(I2C_READ() & 0x7f);
1111111|0x7f
111011|0x3b
-------|----
111011|
hour = bcdToDec(I2C_READ() & 0x3f);
111111|0x3f
11000|0x17
-------|----
11000|
(w drugim wierszu każdej tabelki podana jest możliwa wartość, jaka może być przyjęta/wysłana).
Więc moje pytanie brzmi: jaki jest sens zastosowania koniunkcji bitowej w powyższym przykładzie i czy dobrze rozumiem koniunkcję bitową?