|
Подскажите, пожалуйста, как мне об'яснить транслятору, что
константа CLong_Tmax содержит больше двух байт.
По идее увидев что константа предназначена для unsigned long
транслятор должен вычислять ее в полную(четыре байта) длину.
А на самом деле он вычисляет ее как целую - т.е. старшие два байта
обнуляет.
Правильно получается только в последнем варианте.
static unsigned long int LITT;
#define CP_Tmax 800
#define CIMulPWP 256
-----------------------------------------------
#define CLong_Tmax (CP_Tmax*CIMulPWP)
LITT = CLong_Tmax;
В результате LITT = 0x00.00.20.00 а надо 0x00.03.20.00
-----------------------------------------------
#define CLong_Tmax (0x00000320*0x00000100)
LITT = CLong_Tmax;
В результате LITT = 0x00.00.20.00 а надо 0x00.03.20.00
-----------------------------------------------
#define CLong_Tmax (0x00000320<<8)
LITT = CLong_Tmax;
В результате LITT = 0x00.00.20.00 а надо 0x00.03.20.00
-----------------------------------------------
#define CLong_Tmax (0x00032000) // only that is right for LONG
LITT = CLong_Tmax;
В результате LITT = 0x00.03.20.00 ПРАВИЛЬНО
-----------------------------------------------