Что выполняет данная строка?(Это работа с 16-ричными переменными)
h0 = 0x67452301
h0 = h0 + a & 0xffffffff
Я так понимаю, что это работа с 16 переменными?
Ответы (2 шт):
Ну присваивает хекс значение (0x67452301) переменной h0 потом выполняет сложение с a & 0xffffffff, что без контекста не понятно зачем и т.д.
@EzikBro:
В данном коде к числу
h0 = 1732584193прибавляется остаток отaпри делении на2^32
Это кусок кода подсчёта алгоритма вычисления хэша SHA-1
поскольку в питоне целые числа неограниченной длины, а в алгоритме используются 32 битные числа, то чтобы оставаться в диапазоне 32 битных чисел числа обрезаются
a & 0xffffffff
как раз выполняет функцию "обрезки" любого числа до 4 байт (32 бит)
т.е. вместо алгоритма
h0 += a
используется алгоритм, который не даёт числу улезть за нужный диапазон значений
хотя на мой взгляд более правильным было бы сделать так:
h0 += a
h0 &= 0xffffffff