Прогресс, Сообщая для длительных запросов LINQ. В сообщении в блоге можно найти дополнительный метод WithProgressReporting (), который позволяет Вам обнаружить и сообщить о прогрессе запроса linq, как это выполняется.
The problem you're having is that your assignment isn't resulting in a true or false value.
bits[i] = byte & (mask << i);
This gets the value of the bit. You need to see if the bit is on or off, like this:
bits[i] = (byte & (mask << i)) != 0;
Change
bits[i] = byte & (mask << i);
to
bits[i] = (byte >> i) & mask;
or
bits[i] = (byte >> i) & 1;
or
bits[i] = byte & 1;
byte >>= 1;
В одну сторону, среди многих:
#include <stdio.h>
#include <limits.h>
int main(void) {
int i;
char bits[CHAR_BIT + 1];
unsigned char value = 47;
for (i = CHAR_BIT - 1; i >= 0; i -= 1) {
bits[i] = '0' + (value & 0x01);
value >>= 1;
}
bits[CHAR_BIT] = 0;
puts(bits);
return 0;
}
Вы можете заметить, что на вашем выходе есть пара единиц и нулей, а также степени двойки, например 32. Это потому, что после того, как вы изолировали бит, который вы хотите использовать маску, у вас все еще есть чтобы сдвинуть его на наименее значащую цифру, чтобы он отображался как 1. Или вы можете использовать то, что предлагали другие сообщения, и вместо битового сдвига результата (например, что-то вроде 00001000) вы можете просто использовать ( result! = 0), чтобы получить либо 1, либо 0, поскольку в C false равно 0, а сравнения, такие как! =, вернут 1 как true (я думаю).