Хотя это не очень популярно, у вас есть альтернатива, в которой вы можете использовать битовые поля для выполнения типа операции, о которой вы говорите.Итак, на ideone следующий код будет выполнять предложенное вами действие.
union combine {
struct bits{
int x: 1;
int y: 1;
int z: 1;
int pad : 29;
} bitvalues;
int value;
};
int main() {
union combine test;
test.bitvalues.x = 1;
test.bitvalues.y = 0;
test.bitvalues.z = 1;
test.bitvalues.pad = 0;
printf("result: %d\n", test.value);
return 0;
}
Однако важно отметить, что, поскольку вы используете комбинацию битовых полей исоюз, это не переносимое решение .Это зависит от порядка, в котором вы определяете свои биты, в соответствии с порядком бит / байт для целого числа на этом компьютере.Таким образом, есть способ сделать это без сдвига битов, но вам почти наверняка лучше пойти с решением сдвига битов.