我正在用C語言編程8051,使用Si Labs IDE。我目前有三個字節:address_byte3, address_byte2, and address_byte1
。然後我初始化的變量address_sum
是一個unsigned long int
然後做就可以了以下操作...位移不正確?
address_sum=(address_byte3<<16)+(address_byte2<<8)+(address_byte1);
此操作將導致我相信,值加載到address_sum
如果address_byte3, address_byte2, & address_byte1
是0x92, 0x56, & 0x78
,分別是0xXX925678
。相反,我得到的值爲0xXX005678
。我的邏輯聽起來很合理,但我又是編寫代碼的人,所以我有點偏見,可能被我自己的無知所矇蔽。有沒有人有解決方案或解釋爲什麼address_byte
的價值是「失去」?
謝謝。
你的系統上有多寬的int?它可能是16位。算術運算是通過將操作數提升爲'int'來完成的,所以用'16'移位會給你一個不錯的零... –
@EugeneSh .:移動16會給你_undefined behavior_ –
8051看起來是「Intel_MCS- 51「,它有8位寄存器? https://en.wikipedia.org/wiki/Intel_MCS-51 –