Вероятно, это печать -1.Это потому, что
c = (c | j);
будет оцениваться как
c = (0 | 255) = (0 | 0xFF) = 0xFF
, но, поскольку c
подписано, 0xFF
будет -1, а не 255, как вы ожидали.Если вы измените c
на unsigned char
, будет напечатано 255, как вы себе представляли.