Цитата(Д_М @ Jun 23 2013, 01:01)

что когда умножаются два числа int, а частное long, старшие 16 бит частного всегда равны нулю.
при умножении получается произведение, причем здесь частное? (частное образуется при делении)
все верно при умножении двух int получается int, результат преобразуется в long!
Но только для i386 int 32 битный, а для AVR - 16 битный! Поэтому старшие 16 бит будут или 0 или 0xffff (если результат отрицательный)
Цитата(Д_М @ Jun 23 2013, 01:39)

Если я правильно понимаю, то разрядность переменных определяется спецификацией языка C, а не аппаратной платформой, или компилятором. Везде и всегда int -16 бит, long - 32 бита.
Это не так и во всех книжках по С это написано.
Кстати для AMD64 вообще:
linux - long 64 бита, а windows - long 32 бита!
Так что где важна битность - используйте stdint.h