Почему в intsafe.h Win32api код беззнакового представления абсолютного значения целого числа такой странный? ⇐ 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) { если (х
Я не знаком с 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) { если (х
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение