Цитата
Вместо int вы тоже что-то используете?
Разумеется! Но причина не в буковках, а в том, что в разных платформах int имеет различную разрядность - в PIC/AVR/STM8 он 16-битный, во ARM - 32-битный
Более того, в различных компиляторах по-умолчанию int - знаковый, а в некоторых - нет.
float тоже может иметь различную разрядность на разных платформах, поэтому я явно указываю в платформозависимых типах разрядность типа числом, это оказалось очень полезным.
выдержка из википедии:
Цитата
Реальный размер целочисленных типов зависит от реализации. Стандарт лишь оговаривает отношения в размерах между типами и минимальные рамки для каждого типа:
Так long long не должен быть меньше long, который в свою очередь не должен быть меньше int, который в свою очередь не должен быть меньше short. Так как char — наименьший из возможных адресуемых типов, другие типы не могут иметь размер меньше него.
Минимальный размер для char — 8 бит, для short и int — 16 бит, для long — 32 бита, для long long — 64 бита.
Желательно, чтобы тип int был таким целочисленным типом, с которым наиболее эффективно работает процессор. Это позволяет достигать высокой гибкости, например, все типы могут занимать 64 бита. Однако, есть популярные схемы, описывающие размеры целочисленных типов.[7]
На практике это означает, что char занимает 8 бит, иshort 16 бит (также, как и их беззнаковые аналоги). int на большинстве современных платформ занимает 32 бита, а long long 64 бита. Длина long варьируется: для Windows это 32 бита, для UNIX-подобных систем — 64 бита.
Цитата
Это слабо сказано - "под сомнением". Я бы сказал - так себе код. Очень неоптимальный, с какими-то самопальными типами, с нелогичной иерархией классов.
Я не буду спрашивать, что вы понимаете под "нелогичной иерархией классов", уже неинтересно, поэтому отвечу проще - не нравится мой код, пишите по-своему.
Мне приходилось пробовать разные решения, и похожее как у вас, но оказалось - не моё.
Вам не годится мой подход, мне - ваш.
Врядли дальнейшая наша болтовня полемика это как-то изменит

Поэтому предлагаю переключить внимание на что-то другое ....
Вот до кучи мои типы данных (платформа ARM Cortex-M)
Код
typedef unsigned UNSIGNED1;
typedef unsigned char UNSIGNED8;
typedef unsigned short UNSIGNED16;
typedef unsigned int UNSIGNED32;
typedef unsigned long long UNSIGNED64;
typedef signed char SIGNED8;
typedef signed short SIGNED16;
typedef signed int SIGNED32;
typedef signed long long SIGNED64;
typedef float FLOAT32;
typedef double FLOAT64;
Вот эти макросы считаю очень полезными (макросы применяю крайне редко, вообще, стараюсь их заменять функциями, если это возможно):
Код
#define MAKE_UNSIGNED32(high,low) ((((UNSIGNED32)high) << 16) + low)
#define LOW_UNSIGNED16(unsigned32) ((UNSIGNED16)((UNSIGNED32)(unsigned32) & 0x0000FFFF))
#define HIGH_UNSIGNED16(unsigned32) ((UNSIGNED16)((UNSIGNED32)(unsigned32) >> 16))
#define MAKE_UNSIGNED16(high,low) ((((UNSIGNED16)high) << 8) + low)
#define MAKE_SIGNED16(high,low) ((SIGNED16)MAKE_UNSIGNED16(high,low))
#define LOW_UNSIGNED8(unsigned16) ((UNSIGNED8)((UNSIGNED16)(unsigned16) & 0x00FF))
#define HIGH_UNSIGNED8(unsigned16) ((UNSIGNED8)((UNSIGNED16)(unsigned16) >> 8))
Еще раз на всякий случай повторюсь для потомственных "танкистов":
не нравится моя реализация, не пользуйтесь, обещаю, что настаивать не буду