Właściwie ostatnio trochę pracowałem z bajtami i mogą być denerwujące. Przekształcają się na ints przy najmniejszej prowokacji i nie ma oznaczenia, aby zamienić liczbę w bajt - na przykład 8l da ci długą wartość 8, ale dla bajtu musisz powiedzieć (bajt) 8
Co więcej, będą one (prawie zawsze) przechowywane wewnętrznie jako ints, chyba że używasz tablicy (a może nawet wtedy ... nie wiesz).
Sądzę, że po prostu zakładają one, że jedynym powodem użycia bajtu jest i/o, gdzie faktycznie potrzeba 8 bitów, ale wewnętrznie oczekują, że zawsze będziecie używać ints.
Nawiasem mówiąc, bajt może wykonać gorzej, ponieważ zawsze musi być maskowane ...
Przynajmniej ja pamiętam czytanie że rok temu, mógł zmienić teraz.
Jako przykład odpowiedź na Twoje pytanie, czy funkcja (f) wziął bajt, i trzeba było dwa bajty (B1 i B2), a następnie:
f(b1 & b2)
nie będzie działać, ponieważ b1 & b2 zostanie przekonwertowany na wartość wyższą niż int, a int nie może być automatycznie konwertowane w dół (utrata precyzji). Więc musisz kodować:
f((byte)(b1 & b2))
Który byłby denerwujący.
I nie zawracaj sobie głowy pytaniem DLACZEGO b1 & b2 w górę konwertyty - ostatnio trochę sobie z tym radzę!
Musisz tylko rzucić wartości większe niż 0x7F, ponieważ bajty są podpisane. Nie ma w tym nic irytującego. To znacznie lepsze niż posiadanie paczki unsigned/signed char. Użyj IDE, sprawdzi on bezpieczeństwo typu i wykona rzut za Ciebie. Operacja maskowania jest jedną instrukcją, nie wpływa na wydajność. –