x |= y
- это сокращение для x = x | y
, поэтому вы получите
0 = 0 | (1 << 15)
В этом выражении вы пытаетесь присвоить что-то литералу, что невозможно. Также |
является избыточным, поскольку 0 | x
всегда просто x
.
Из вашего комментария «Я хочу замаскировать разные биты, а затем назначить все биты одной переменной» Похоже, вам нужны простые константы, которые маскируют один бит:
#define DATA (1 << 15)
, которое является целым числом только с 1 битом, которое можно использовать в качестве маски. По разным причинам вы должны предпочесть constexpr
макросам в современном C ++:
constexpr unsigned DATA = 1 << 15;
Вы можете использовать оба, как вы упомянули
auto x = DATA | 0x00f0 | 0x0100;