C Неподписанный интервал, обеспечивающий отрицательную величину?

В SQL Server 2005 и позже Вы могли создать функцию CLR, чтобы сделать это.

5
задан Dannul 2 December 2009 в 09:33
поделиться

3 ответа

% d означает, что printf интерпретирует значение как int (со знаком). используйте% u, если это целое число без знака.

4
ответ дан 18 December 2019 в 05:19
поделиться

Это должно работать:

unsigned int a;
printf("%u\n", a);

Explanation: На большинстве архитектур целые числа со знаком представлены в дополнении до двух . В этой системе положительные числа меньше 2 ** (N-1) (где N = sizeof (int) ) представлены одинаково, независимо от того, используете ли вы int или unsigned int . Однако, если число в вашем unsigned int больше, чем 2 ** (N-1) , оно представляет собой отрицательное число со знаком меньше двух '

10
ответ дан 18 December 2019 в 05:19
поделиться

Печать % d будет читать целое число как десятичное число со знаком, независимо от его определенного типа.

Для печати чисел без знака используйте % u .

Это происходит из-за способа C обрабатывать переменные аргументы. Компилятор просто извлекает значения из стека (набранные как void * и указывающие на стек вызовов), а printf должен выяснить, что содержат данные из строки формата, которую вы ему передаете. .

Вот почему вам необходимо предоставить строку формата - C не имеет возможности RTTI или «базового класса» (например, Object в Java) для получения общий или предопределенный toString from.

27
ответ дан 18 December 2019 в 05:19
поделиться
Другие вопросы по тегам:

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