versionNumberAndPlaceNumber
, являющийся 0xFFFF00
, истинный регистр следующего if
не введен:
if(versionNumberAndPlaceNumber & 0xFFUL == 0UL) {
Почему это так?
.
Ниже приведена выдержка из более длинного кода:
if(bytes_received == 27) { // the data size of "struct bee" (padded), version number (8 bits) and place number of struct place
printf("\n27\n");
unsigned long versionNumberAndPlaceNumber = 0;
memcpy(&versionNumberAndPlaceNumber, &(read[24]), 8); // read 8 = sizeof(long) on x64 bytes, hope it's faster than transferring less bytes on x64 (into possibly a register)
/* memcpy copies bytes from increasing source address to increasing destination address, x64 this is supposed to run on is Little Endian thus for example [0xFF, 0x00, ...] as an unsigned long is ...0000000011111111 = 255 */
printf("\n%lu\n", versionNumberAndPlaceNumber);
if(versionNumberAndPlaceNumber & 0xFFUL == 0UL) { // version 0 of data for version 0 of this server
printf("\nv correct\n");
unsigned long location[3];
(Обратите внимание, что буфер чтения составляет 32 байта.)
А вот вывод:
27
16776960
.
Отладка:
Вместо печати versionNumberAndPlaceNumber
Я также напечатал все условие if
(указывая %d
вместо %lu
) и получил 0
в качестве вывода, таким образом, условие представляется ложным.
Но 16776960
= 0xFFFF00
и 0xFFFF00
AND
0xFF
равно 0
.
Почему 0 == 0
false
?