У меня есть данные, записанные в short тип данных. Записанные данные имеют форму дополнения 2. Теперь, когда я пытаюсь распечатать данные с использованием% 04x, данные с MSB = 0 печатаются штрафом, например, если data = 740, печать я получаю 0740 Но когда MSB = 1, я не могу получить правильную печать , Например, если данные = 842, печать я получаю: fffff842 Я хочу, чтобы данные усекались до 4 байтов, поэтому ожидаемый результат - f842Как усечь вывод дополнений 2
ответ
Я предполагаю, что здесь есть C (или, возможно, C++).
Из аргументов по умолчанию поощрений задействованных при вызове функции с переменными аргументами (например, printf
), ваше использование short
приведет к продвижению целого, в котором говорится, что «Если INT может представлять все значения исходного типа (ограниченные шириной для битового поля ), значение преобразуется в значение int «.
A short
преобразуется в int
с помощью расшифровки знака, а знак 0xf842 с расширением до 32 бит равен 0xfffff842.
Вы можете использовать побитовое И чтобы замаскировать самое значительное слово:
printf("%04x", data & 0xffff);
Можно также добавить h
длины спецификатора указать, что вы хотите только печатать (без знака) short
на сумму битов из int
:
printf("%04hx", data);
либо объявить данные как тип, который имеет длину 16 бита, или убедитесь, что функция печати использует правильный формат для значения 16 бита. Или используйте ваш текущий тип, но побитовое И с 0xffff
. То, что вы можете сделать, зависит от того, на каком языке вы это делаете.
Но каким бы способом вы ни отправились, проверьте свои предположения снова. В вашем вопросе, по-видимому, есть несколько вопросов:
- 2s-дополнение применяется только к подписанным номерам. В вашем вопросе нет отрицательных чисел.
- Предполагая, что вы имеете в виду C's
short
- он не должен быть 16 бит в длину. - «Я получаю fffff842 Я хочу, чтобы данные усекались до 4 байтов» -
fffff842
имеет длину 4 байта.f842
имеет длину 2 байта. - 2-байтовое значение
842
не имеет набора MSB.
- 1. Доказательство дополнений 2
- 2. Представление данных дополнений 2
- 3. Конвертор дополнений 2 в C++
- 4. Verilog Конструкция Компаратора дополнений 2
- 5. Совет для вычитания дополнений 4-битного 2
- 6. Как ограничить поле дополнений?
- 7. И числа и его дополнений 2
- 8. Атрибут 2-х дополнений из 2 отрицательных чисел
- 9. Java таинственный вывод из дополнений: некоторые оцениваются, некоторые напечатаны
- 10. Как найти представление дополнений 6-битного 2 -32
- 11. Как усечь двойное значение?
- 12. Как усечь строку .NET?
- 13. Как усечь строку [формирование]?
- 14. Как усечь текст?
- 15. Как усечь числа?
- 16. Как ограничить/усечь массив?
- 17. Как усечь заголовок HWND
- 18. Как усечь в C
- 19. Как усечь число до 2 десятичных знаков в ColdFusion?
- 20. Усечь строку
- 21. Как усечь определенный текст в javascript
- 22. Как синхронизировать вывод 2 FileSystemWatcher
- 23. Код обновления дополнений '
- 24. Представление номера двух дополнений
- 25. Как усечь выражение форматирования форматирования
- 26. Как усечь файл в C?
- 27. Как усечь строку в эликсире?
- 28. Как усечь первую цифру числа?
- 29. Как усечь список в C#?
- 30. Преобразование двух дополнений