В настоящее время я пишу решение для проекта в своем классе CS и получаю противоречивые результаты.
По сути, мне нужно прочитать один бит из байта, который читается из файла.
Это соответствующие методы (игнорируйте стандарты именования, я их не создавал и тоже ненавижу):
static bool no_more_bytes()
/**********************/
/*** NO MORE BYTES? ***/
/**********************/
{
return (in_stream.PeekChar() == -1);
}
static byte read_a_byte()
/********************************************************************************/
/*** Function to read a single byte from the input stream and set end_of_file ***/
/********************************************************************************/
{
byte abyte;
if (!no_more_bytes())
abyte = in_stream.ReadByte();
else
{
abyte = 0;
end_of_file = true;
}
return abyte;
}
static byte getbit()
/**********************************************************/
/*** Function to get a single BIT from the input stream ***/
/**********************************************************/
{
byte mask;
if (current_byte == 0 || current_bit_position == 8)
{
current_byte = read_a_byte();
current_bit_position = 0;
}
mask = current_bit_position;
current_bit_position++;
//Your job is to fill in this function so it returns
//either a zero or a one for each bit in the file.
bool set = (current_byte & (128 >> current_bit_position - 1)) != 0; // This is the line in question
if (set)
{
return 1;
} else
{
return 0;
}
}
getbit () - метод, который я написал, иэто работает правильно.Однако мое первое решение не сработало.
Когда входной файл содержит «ABC», он правильно выводит 01000001 00100001 01100001
(65, 66, 67), считывая по 1 биту за раз.
Однако, мое первоначальное решение было
bool set = (current_byte & (1 << current_bit_position - 1)) != 0;
Итак, вопрос: почему сдвиг 128 вправо на current_bit_position дает другой результат, чем сдвиг 1 влево на current_bit_position