Почему делает брюшной пресс stdlib.h (), семья функций возвращает значение со знаком?

Вообразите, могли ли Вы использовать тот же UI (XAML) от Вашей страницы ASP.NET/ (Silverlight) с Вашим настольным приложением. Вы только создали бы его однажды, но соединили бы его проводом любому.... это - одно из намерений WPF/XAML... мы действительно там уже? Еще, но ближе получение.

10
задан cdleary 23 October 2009 в 02:52
поделиться

2 ответа

Настоящий ответ на этот вопрос заключается в правилах повышения типа.

Если я применяю арифметический оператор к unsigned int и int ], то аргумент int переходит в беззнаковый , и результат также становится беззнаковым .

Если функция abs () вернула беззнаковый , то при использовании в выражении это вызвало бы такой вид повышения типа других значений, что привело бы к неожиданным результатам. Например, этот код:

if (abs(-1) * -1 < 0)
    printf("< 0\n");
else
    printf(">= 0\n");

выведет «> = 0», что многим не нравится. Компромисс, заключающийся в невозможности использовать единственное значение INT_MIN , по-видимому, казался приемлемым.

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

Зачем вообще возвращать значение, используя беззнаковое пространство?

Давайте рассмотрим 8-битные числа со знаком и без знака. Если у вас -128, результат не определен ... Я думаю, stdlib не хочет сильно замедлять работу. Если вы думаете, что у вас может быть число в этом диапазоне, тогда вам нужно использовать что-то другое.

Если вы думаете, что у вас может быть значение больше 127 в вашем подписанном char, то вы ошибаетесь.

Следовательно, это не требуется для того, чтобы значение могло содержать значение больше 127, и сохранение его подписью ничего не теряет. Если вы хотите преобразовать его в unsigned, продолжайте. Поскольку раньше это было целое число со знаком, велика вероятность, что вы снова будете выполнять математические вычисления со знаком. Лично я бы предпочел, чтобы шрифт оставался подписанным,

0
ответ дан 3 December 2019 в 20:05
поделиться
Другие вопросы по тегам:

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