Почему 8-разрядное поле имеет порядок байтов?

Не знаю, зачем вам это нужно, но вы можете попробовать это:

>>> i1, i2, i3 = 1234, 45, 856
>>> print(f"{i1:<5}{i2:<5} {i3}") # your example
1234 45    856 
>>> print(f"{i1:<5}{i2:<5} \r{i3}") # start from the begging and overwrite
8564 45
>>> print(f"{i3:>50}\r {i1:<5}{i2:<5}")
1234 45                                       856

Третий случай смещает i3 на 50 символов вправо и только после этого печатает i1 и i2. Но будьте осторожны, становится немного сложно печатать все правильно.

Если вы хотите отформатировать вывод в виде столбцов, посмотрите на это Создайте хороший вывод столбца в python или какой-нибудь счетчик терминала / индикатор выполнения Текстовый индикатор выполнения в консоли [закрыто] [115 ]

15
задан Claudiu 14 May 2009 в 15:35
поделиться

5 ответов

Есть два вида порядка. Один - порядок байтов, второй - порядок битовых полей. В языке Си нет стандартного порядка порядка битовых полей. Это зависит от компилятора. Как правило, порядок битовых полей меняется на обратный от старшего до младшего.

21
ответ дан 1 December 2019 в 01:24
поделиться

Насколько я понимаю, порядок следования битов и порядок следования байтов, как правило, две разные вещи. Структуры с битовыми полями обычно не переносятся между компиляторами / архитектурами. Иногда ifdefs можно использовать для поддержки другого порядка битов. В этом случае порядок байтов действительно не имеет значения, и это должен быть ifdef о порядке битов. Предположение, что некоторые порядки байтов имеют определенный порядок битов, в некоторых случаях может быть верным.

1
ответ дан 1 December 2019 в 01:24
поделиться

Возможно, что в этой машине порядок байтов также относится к порядку битов, а также к порядку байтов. В этой статье в Википедии упоминается, что иногда это так.

3
ответ дан 1 December 2019 в 01:24
поделиться

Насколько я понимаю, комментарий состоит в том, что два однобайтовых поля вместе считаются двухбайтовыми значениями (или были - кажется, что один байт все равно не используется). Вместо того чтобы объявлять одно двухбайтовое значение, они объявляют два однобайтовых значения, но меняют порядок объявления в зависимости от порядка байтов.

0
ответ дан 1 December 2019 в 01:24
поделиться

Это зависит от компилятора и не переносится. Порядок упорядочивания битовых полей зависит от реализации, здесь было бы намного лучше использовать 8-битное поле и сдвиг / маску для получения подполей.

11
ответ дан 1 December 2019 в 01:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: