Что означает добавляемый ноль в операторе присваивания C?
base_u_size |= (precomp_size[k] & ((mpi_size_t)0 - (k == e0)) );
Также ответьте @ Sourav Ghosh , он приводит 0 к типуmpi_size_t
.
Чтобы ответить , почему код выполняет приведение?
В mpi/mpi-pow.c
, base_u_size
имеет тип mpi_size_t
.
Чтобы убедиться, что правая часть задания выполнена с использованием не менее ранга и ширины mpi_size_t
математических и тихих предупреждений смешанных типов со знаком.
Включением mpi_size_t
вправая сторона, вычитание и &
используют ширину, которая не теряет информацию.
С типами объектов, таких как здесь (у меня нет точно, что такое OPиспользуя), это, вероятно, не имеет никакого значения здесь.base_u_size |= precomp_size[k] & -(k == e0);
было бы хорошо - но вырасти привередливые предупреждения.
Код OP является распространенной идиомой (делайте правую математику, по крайней мере, такую же ширину, как левый размер, и стремитесь к той же значимости), чтобы избежать проблем.