Moin,
wie üblich möchte ich das HByte nach links shiften und mit dem LByte
addieren.
Ich lese einen SRF02 aus:
1 | uint16_t getRange(void){
|
2 | uint16_t x;
|
3 | x = i2cRead(SRF02,2); // x = 1
|
4 | lcd_string_Int(x); // Ausgabe = 1
|
5 | lcd_string(" / ");
|
6 | x = (i2cRead(SRF02,2) << 8); // x = -27648 ???
|
7 | lcd_string_Int(x); // Ausgabe = -27648
|
8 | x += i2cRead(SRF02,3);
|
9 | return(x);
|
10 | }
|
Ich kann einfach nicht nachvollziehen warum ich beim zweiten mal mit
shiften den Wert -27648 bekomme, besonders weil alles unsigned ist. Es
sollte doch 256 sein. Die Funktion i2cRead übergibt den Wert als
uint8_t.
1 | void lcd_string_Int(uint16_t tmp_int){
|
2 | unsigned char buffer[20];
|
3 | itoa(tmp_int, buffer, 10);
|
4 | lcd_string(buffer);
|
5 | }
|
PS: Gerade hatte ich es, dass im HByte Register eine 0 stand. Trotzdem
hat er beim shiften -27648 daraus gemacht. Warum passiert das?