Я работаю над тем, что добавляет несколько шестнадцатеричных значений (base16).
В обычной программе на Си я делаю следующее:
uint32_t test1 = 0x5BE0CD19;
uint32_t test2 = 0x3587272B;
uint32_t test3 = 0x1F85C98C;
uint32_t test4 = 0x428A2F98;
uint32_t test5 = 0x61626380;
uint32_t test6 = (test1 + test2 + test3 + test4 + test5);
printf( "%08x \n", test6 );
Результат:
> 54da50e8
Однако в PHP (мой PHP 64-битный), когда я применяю ту же сумму с:
$test1 = 0x5BE0CD19;
$test2 = 0x3587272B;
$test3 = 0x1F85C98C;
$test4 = 0x428A2F98;
$test5 = 0x61626380;
$test6 = ($test1 + $test2 + $test3 + $test4 + $test5);
echo(sprintf( "%08x \n", $test6 ));
, я получаю:
> 154da50e8
Что странно делает числодополнительный длинный символ с 1
перед ним.
Есть ли причины для такого поведения, и если да, то как я могу предотвратить это?