unsigned char acc_data_start_EEPROM[4]={0x00,0x0f,0x42,0x34};//即二进制是00000000,00001111,01000010,00110100 这4个数合到一起是十进制数999988
unsigned long acc_data_start;
///////////////////////////方法1//////////////////////////////////////////////////////////////////////////
acc_data_start=((((acc_data_start_EEPROM[0]<<0x18)+(acc_data_start_EEPROM[1]<<0x10))+(acc_data_start_EEPROM[2]<<0x08))+(acc_data_start_EEPROM[3]));
///////////////////////////方法2////////////////////////////////////////////////////////////////////////////////////////////////
acc_data_start=acc_data_start_EEPROM[0];
acc_data_start=acc_data_start<<8;
acc_data_start=acc_data_start+acc_data_start_EEPROM[1];
acc_data_start=acc_data_start<<8;
acc_data_start=acc_data_start+acc_data_start_EEPROM[2];
acc_data_start=acc_data_start<<8;
acc_data_start=acc_data_start+acc_data_start_EEPROM[3];
开发环境是ICCAVR,用以上两种方法把acc_data_start_EEPROM[4] 合并成00000000000011110100001000110100 即十进制数99988,保存到 acc_data_start,但是高16位好像丢了,只有低16位.这时为什么?该怎么处理?求助
经过我的验证,就是直接赋值 acc_data_start=0b00000000000011110100001000110100,acc_data_start也是保存不了高16位,ICCAVR是支持long型的啊!?
百度 ICCAVR long ,第一条,马老师在***电子论坛里有讲,但是看不懂,求高人用通俗的语言讲解,多谢。
|