Это на вашей платформе выглядит как , переменная типа int
хранится в 16 битах, а переменная типа char
хранится в 8 битах.
Это не всегда происходит, так как стандарт C ++ не гарантирует размер этих типов. Я сделал свое предположение на основе кода и комментария. Используйте типы данных фиксированного размера, такие как описанные здесь , чтобы убедиться, что это предположение всегда будет верным.
И int
, и char
являются целочисленными типами. При преобразовании из большего целочисленного типа в меньший целочисленный тип (например, от int
до char
) старшие биты отбрасываются, а младшие биты сохраняются (в этом случае сохраняются последние 8 битов).
Прежде чем полностью понять код, вам также необходимо знать о сдвиге вправо. Это просто перемещает биты вправо (для целей этого ответа не имеет значения, что вставлено справа). Следовательно, младший значащий бит (самый правый бит) отбрасывается, каждый второй бит перемещается на один пробел вправо. Очень похоже на деление на 10 в десятичной системе.
Теперь у вас есть переменная Speed
, которая имеет 16 битов.
Speed_H = Speed >> 8;
Это сдвигает Speed
на 8 бит вправо, а затем присваивает 8 младших разрядов Speed_H
. В основном это означает, что у вас будет в Speed_H
8 старших разрядов («верхняя» половина Speed
).
Speed_L = Speed;
Просто присваивает Speed_L
младшие 8 бит.
Комментарий в основном гласит, что вы разбили переменную из 16 битов на 2 переменные по 8 бит, причем первые (наиболее значимые) 8 битов были сохранены в Speed_H
, а последние (наименее значимые) 8 битов были сохранены в Speed_L
.