Форматирование не усекает никаких значащих цифр. Вот почему, если вы укажете меньше позиций, чем необходимо для представления, ваш лимит будет проигнорирован, и будут представлены все значащие цифры. Например, если у вас есть число 0x12345 и вы пытаетесь отформатировать его, используя только 2 позиции (как в вашем формате), результирующая строка будет состоять из 5 цифр, а не 2.
Шестнадцатеричный ff означает десятичное число 255, а не десятичный -1, как вы могли ожидать. Число -1 имеет тип int . Это занимает 4 байта в памяти. Его шестнадцатеричное представление действительно требует ffffffff, то есть 8 шестнадцатеричных цифр. Там нет ведущих нулей, которые вы могли бы обрезать. Ведущие нули возможны только для положительных чисел. Например, -2 будет отформатирован как fffffffe, от -3 до fffffffd, от -256 до ffffff00, от -257 до fffffeff и т. Д. c.