В SQL Server 2005 и позже Вы могли создать функцию CLR, чтобы сделать это.
% d означает, что printf интерпретирует значение как int (со знаком). используйте% u, если это целое число без знака.
Это должно работать:
unsigned int a;
printf("%u\n", a);
Explanation: На большинстве архитектур целые числа со знаком представлены в дополнении до двух . В этой системе положительные числа меньше 2 ** (N-1)
(где N = sizeof (int)
) представлены одинаково, независимо от того, используете ли вы int
или unsigned int
. Однако, если число в вашем unsigned int больше, чем 2 ** (N-1)
, оно представляет собой отрицательное число со знаком меньше двух '
Печать % d
будет читать целое число как десятичное число со знаком, независимо от его определенного типа.
Для печати чисел без знака используйте % u
.
Это происходит из-за способа C обрабатывать переменные аргументы. Компилятор просто извлекает значения из стека (набранные как void *
и указывающие на стек вызовов), а printf
должен выяснить, что содержат данные из строки формата, которую вы ему передаете. .
Вот почему вам необходимо предоставить строку формата - C не имеет возможности RTTI или «базового класса» (например, Object
в Java) для получения общий или предопределенный toString
from.