Третья строка должна быть изменена на
((unsigned long long)a) << 32 | ((unsigned long long) b)
Что делает ваш текущий код, берет 32-битную переменную a
и сдвигает ее на 32 бита влево (делая ее значение 0,так как нижние 32 бита все пустые), то с помощью 32-битной переменной b
.
измененная версия выполняет регистрацию 32-битной переменной a
до 64 бит, сдвиньте его на 32 бита влево, приведите 32-битную переменную b
к 64-битам, а затем или две 64-битные переменные вместе.Результат, естественно, 64 бит.