C语言中的字节顺序和移位运算符,我做对了吗?

Endianness and shift operator in C language, am I doing it correctly?

原始代码工作正常,它是:

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

在第一个代码中,如果值 = 10101010,它将作为 01010101 发送。 我想改变传输的顺序,例如,如果value = 10101010,我想传输10101010。

为了实现这个,我做了以下代码:

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

但是,它不起作用,它正在传输全 0。我做错了什么吗?

显然writePortAPin2()写入操作数的最低有效位。您需要写入 value

的最高有效位

改变这个

writePortAPin2(value & 0x80);

至此

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