Порядковый оператор и оператор сдвига в языке Си, я делаю это правильно? - PullRequest
0 голосов
/ 13 декабря 2018

Исходный код работает нормально, это:

for(i = 0; i < 8; i++){
  while(readPortAPin1() == BAIXO);
  writePortAPin2(value & 0x01);
  value >>= 1;
  while(readPortAPin1() == ALTO);
}

В первом коде, если значение = 10101010, оно будет отправлено как 01010101. Я хотел бы изменить порядок передачи, например,если значение = 10101010, я хотел бы передать 10101010.

Чтобы реализовать это, я сделал следующий код:

for(i = 0; i < 8; i++){
  while(readPortAPin1() == BAIXO);
  writePortAPin2(value & 0x80);
  value <<= 1;
  while(readPortAPin1() == ALTO);
}

Но он не работает, он передает все 0.Я что-то не так делаю?

1 Ответ

0 голосов
/ 13 декабря 2018

Очевидно writePortAPin2() записывает младший значащий бит операнда.Вам нужно записать самый старший бит value

Изменить это

writePortAPin2(value & 0x80);

на это

writePortAPin2((value >> 7) & 0x01);
...