В дополнение ко всем другим замечательным комментариям, я подумал, что добавлю один небольшой лакомый кусочек. Многие комментарии задаются вопросом, почему int, long и почти любой другой числовой тип также не следует этому правилу ... возвращать «больший» тип в ответ на арифметический.
Многие ответы были связаны с производительностью (ну, 32 бита быстрее, чем 8 бит). На самом деле, 8-битное число по-прежнему является 32-битным числом для 32-битного процессора ... даже если вы добавите два байта, фрагмент данных, с которым работает процессор, будет 32-битным независимо ... поэтому добавление int не будет будь «быстрее», чем добавление двух байтов ... все равно процессору. СЕЙЧАС добавление двух целых чисел БУДЕТ быстрее, чем добавление двух длинных чисел на 32-битном процессоре, потому что добавление двух длинных чисел требует больше микроопераций, так как вы работаете с числами шире, чем слово процессора.
Я думаю, что основная причина того, что байтовая арифметика приводит к целым числам, довольно ясна и прямолинейна: 8-битные просто не идут очень далеко! : D С 8 битами у вас есть беззнаковый диапазон от 0 до 255. Это не много места для работы ... вероятность того, что вы столкнетесь с ограничениями по байтам, ОЧЕНЬ высока при их использовании в арифметике. Однако вероятность того, что у вас закончатся биты при работе с целыми, длинными, двойными и т. Д., Значительно ниже ... достаточно мала, чтобы мы очень редко сталкивались с потребностью в большем количестве.
Автоматическое преобразование байта в int является логическим, потому что размер байта очень мал. Автоматическое преобразование из int в long, float в double и т. Д. нелогично, потому что эти числа имеют значительный масштаб.
person
jrista
schedule
03.06.2009
byte1 | byte2
вовсе не считает их числами. Это трактует их именно как образцы битов. Я понимаю вашу точку зрения, но так получилось, что каждый раз, когда я выполнял арифметические операции с байтами в C #, я фактически рассматривал их как биты, а не числа, и такое поведение всегда мешает. - person Roman Starkov   schedule 28.12.2009int
(по крайней мере, на C или C ++): stackoverflow.com/a/43578929/4561887 - person Gabriel Staples   schedule 28.04.2017byte
s. - person The Photon   schedule 11.07.2017