/* [1] */
int i = -1;
unsigned u = (unsigned)i;
/* [2] */
int i = -1;
unsigned u;
memcpy(&u, &i, sizeof i);
/* [3] */
int i = -1;
unsigned u = *(unsigned *)&i;
Чтобы скопировать целое число со знаком с его неподписанным партнером, [1]
должно работать на большинстве машин, но насколько я знаю, это не гарантированное поведение.
[2]
должен делать именно то, что я хочу, но я хочу избежать накладных расходов на вызов библиотечной функции.
Итак, как насчет [3]
? Эффективно ли он достигает того, что я намерен?