У меня есть вопрос о числах с цифрами и шестнадцатеричных числах и их использовании в арифметике в C. Из того, что я понимаю, подписанные числа обычно могут хранить меньшие числа, чем их неподписанные копии.Должен ли я использовать формат шестнадцатеричного числа в C для выполнения арифметики?
Например, целое число со знаком, длина которого составляет 32 бита, имеет максимальное значение 2,147,483,647; тогда как 32-битное целое число без знака имеет диапазон до 4 294 967 295.
Оказывается, что значение этих чисел перетоков при выполнении сложения на максимально возможных значений:
printf("My integer: %i\n", 2147483647 + 1);
Вывод, который я получаю:
My integer: -2147483648
Однако, несмотря на это переполнение , представление шестнадцатеричной числовой строки выглядит корректно и корректно для операции добавления.
printf("My hexadecimal: %#X\n", 0x7FFFFFFF + 0x1); // 2147483647 + 1 in Hex
Вывод, который я получаю:
My hexadecimal: 0X80000000
Мой вопрос, будет ли какой-либо ситуации, когда выполнение этого типа сложения, а затем, глядя на шестнадцатеричное представление выгодно?
На первый взгляд кажется, что этот метод даст нам доступ ко всему диапазону 32-разрядного номера для операции добавления. Любые мысли или комментарии оценены. Cheers
Игра с переполнениями - опасная игра. Шестнадцатеричное представление - это * только представление *. Он не содержит больше или меньше информации, чем десятичная. Это просто удобство использования того или другого. –
Если вы хотите беззнаковые числа, используйте специальный 'u' суффикс:' 2147483647u' – anatolyg
И% x (% X) - это значение без знака int hex. –