Если (по какой-либо причине) вы хотите подать в него отрицательные целые числа, тогда вам нужно обрезать все биты выше первого байта с помощью & 0xFF
:
def to24Bits(p: Int, q: Int, r: Int): Int = {
((p & 0xFF) << 16) | ((q & 0xFF) << 8) | (r & 0xFF)
}
Ваши примеры:
for ((p, q, r) <- List(
(0xFF, 0x00, 0x00),
(0x00, 0xFF, 0x00),
(0x00, 0x00, 0xFF),
(0x11, 0x22, 0x33),
(0xFF, 0xFF, 0xFF),
(0xffffff11, 0xffffff88, 0xffffff00)
)) {
printf("0x%06X\n", to24Bits(p, q, r))
}
Выход:
0xFF0000
0x00FF00
0x0000FF
0x112233
0xFFFFFF
0x118800