Стандарт C не предписывает, использует ли реализация 2 дополнения, 1 дополнение или что-то еще. Таким образом, представление отрицательных значений также не обязательно.
Однако в вашем конкретном случае 0x3
является положительным значением, поэтому расширение знака и расширение нуля - это одно и то же!