INC dst
эмулируется с ADD #1, dst
, поэтому первые две версии в точности совпадают.
Что касается третьей версии: в представлении дополнения к двум, инвертируя все биты, вычисляется отрицательный минус один,так что вы вычисляете (- x - 1) + 1 или - ( x + 1) + 1, что на самом деле то же самое.
И если вы хотитеболее практическая демонстрация, просто используйте грубую силу:
#include <assert.h>
#include <stdint.h>
#include <stdio.h>
int main()
{
for (uint32_t i = 0; i < 0x10000; i++) {
uint16_t input = i;
uint16_t output1 = (~input) + 1;
uint16_t output2 = ~(input - 1);
assert(output1 == output2);
}
puts("it works!");
return 0;
}