16 Bit INT in RoboPro
Verfasst: 03 Sep 2016, 10:47
Hallo,
beim Lesen von 16Bit Werten an der I2C-Schnittstelle des TX mit einem Temperatur/Feuchte-Sensor bin ich über das Problem des eingeschränkten Zahlenbereichs gestolpert, da Werte über 32768 als negative Zahlen interpretiert werden.
Zwei Umwandlungen habe ich mir überlegt.
1. eine Verzweigung: Wenn Zahl ≥ 0 dann Wert:= Zahl andernfalls Wert := 65536 + Zahl
2. Mit SHR um 1 Stelle wird die führende 1 (das "Minuszeichen") unterdrückt. Da dies aber einer Division durch 2 entspricht, muss anschließend wieder mit 2 multipliziert werden.
Bei ungeraden Zahlen stimmen die Ergebnisse nicht überein, was aber in vielen Fällen unerheblich sein wird.


Gruß,
Stuessi
beim Lesen von 16Bit Werten an der I2C-Schnittstelle des TX mit einem Temperatur/Feuchte-Sensor bin ich über das Problem des eingeschränkten Zahlenbereichs gestolpert, da Werte über 32768 als negative Zahlen interpretiert werden.
Zwei Umwandlungen habe ich mir überlegt.
1. eine Verzweigung: Wenn Zahl ≥ 0 dann Wert:= Zahl andernfalls Wert := 65536 + Zahl
2. Mit SHR um 1 Stelle wird die führende 1 (das "Minuszeichen") unterdrückt. Da dies aber einer Division durch 2 entspricht, muss anschließend wieder mit 2 multipliziert werden.
Bei ungeraden Zahlen stimmen die Ergebnisse nicht überein, was aber in vielen Fällen unerheblich sein wird.


Gruß,
Stuessi