Почему в intsafe.h Win32api код беззнакового представления абсолютного значения целого числа такой странный?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Почему в intsafe.h Win32api код беззнакового представления абсолютного значения целого числа такой странный?

Сообщение Гость »


Я не знаком с c/c++, но знаю, что этот код принимает беззнаковое абсолютное значение. Странно, почему программист Microsoft должен сначала получить +1 к целому числу, затем его отрицательное значение, а затем +1. Почему нельзя просто использовать его, а затем преобразовать в целое число без знака?

//intsafe.h если (llMultiplican < 0) { // // Избегайте отрицания самого отрицательного числа. // ullMultiplicand = ((ULONGLONG)(- (llMultiplicand + 1))) + 1; } еще { ullMultiplicand = (ULONGLONG)llMultiplicand; } Например, для целого числа, состоящего всего из 4 бит, минимальное значение равно -8, что в двоичном формате равно «1000». Я знаю, что отрицательное число по-прежнему равно 1000, но если в этот момент его преобразовать в беззнаковое целое число, его беззнаковое абсолютное значение уже можно получить.

Я думал, что это может быть проблема с производительностью, но после нескольких запусков непосредственно на языке C мне было трудно увидеть разницу. И странно, что положение функции в коде будет влиять на общее время. Например, сначала напишите объявление и реализацию функции abs1 над функцией abs2 или наоборот. Место вызова то же самое, но результаты разные. Я не могу понять
unsigned int abs1(int x) { если (х
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»