No já bych řek že 32b proměná je 4x8b tzn, nemůžeš dát posun o 30 míst, to by muselo jít přeš 4 registry a nebo pam. místa. Tak proto to nejde podle mě.
uint32_t temp;
temp=0;
temp |= (1<<30);
Nejde, protože konstanta “1” je typu int.
Je třeba ji přetypovat na long.
uint32_t temp;
temp=0;
temp |= (1UL<<30);
Diky, funguje to. To by me nikdy nenapadlo. Pretypovani promennych ano, ale pretypovani konstant…
Ja jsem se to snazil najit, ale tohleto je proste takovy spek, ktery zkuseny programator ma v malicku, ale my amateri…
Celočíselná konstanta bude mít první typ do kterého se vejde:
int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t.
Číslo 1 v příkladu bude typu int16_t.
0000000000000001
Takže pokud ho šiftneme doleva o víc než 15 míst, dostaneme nulu.