Uno can't receive values >127 through Serial.Read()

I'm currently developing some outputs with daisy chained 74HC595 shift registers. I want to control them over USB (Serial port from Arduino). This alrady works, but now I found a bug in the Arduino Serial.Read().

If the value send is 128 or greater, the Uno alters the received value. Since this is the highest bit, there might be some issues with signed/unsigned in the Serial implementation.

You can easily reproduce this using an Uno and the Serial Monitor. Just upload the following code, open the Serial Monitor and send values equal or bigger to 128. (You can enter those values by holding the Alt key and enter the desired value on the numpad).
Normally the Uno should return the value you have entered, which works fine up to 127.

#define BAUD_RATE 115200 // set baud rate of the serial interface

void setup() {

void loop()
  if (Serial.available())
    byte byteRead =;
    Serial.print("I received: ");
    Serial.println(byteRead, DEC);

Works for me on a Nano and a Teensy++ 2.


It seems this is no issue on the microcontroller but on the PC side. Using the Serial Monitor from the IDE and some C# .net code I receive the wrong values. If I use putty as the serial terminal everything works like expected.