|
From: | Michael Hennebry |
Subject: | Re: [avr-chat] Type promotion and shift operators |
Date: | Wed, 2 Feb 2011 10:15:40 -0600 (CST) |
User-agent: | Alpine 1.00 (DEB 882 2007-12-20) |
On Wed, 2 Feb 2011, Rick Mann wrote:
I was working with some uint32_t variables, using shifts, like this: uint32_t foo = 0; for (...) { uint32_t v = // some value between [0, 31) foo |= 1 << v; } This didn't work correctly for values of v greater than 15 until I changed the line to: foo |= 1UL << v; From what I understand of C, it should've promoted 1 to long, but maybe it's a signed-vs-unsigned issue? What's happening on an ATmega644A with this code?
'Twas a quiet change. the type of x<<y is now the type of x after the usual integer promotions. -- Michael address@hidden "Pessimist: The glass is half empty. Optimist: The glass is half full. Engineer: The glass is twice as big as it needs to be."
[Prev in Thread] | Current Thread | [Next in Thread] |