Sergey Kubushyn {
k...@koi8.net}:
>>>В DSP семейства C2000 от техасских приборов байт
>>> имеет длину 16 бит :) И int тоже. Потому как
>>> адресовать меньше 16 бит он не умеет. И больше
>>> тоже.
>>>Потому в ейном Цэ для доступа к 8-битным значениям
>>> используются ассемблерный костыль в виде
>>> компиляторного intrinsic. При этом тот интринсик
>>> называется тоже __byte() и имеет прототип "int
>>> &__byte(int *array, unsigned int index)" который
>>> при всей его головоломности понимает как
>>> Цэ-два-креста, так и лысый Цэ.
>> На древней М-6000 было так же. Адресовались
>> только слова, но байт уже существовал как
>> понятие. ^M Похоже, что никакой утверждённой
>> свыше дефиниции байта не существует. Спор о
>> дефиниции - это спор о том, чего нет. BinarY
>> TErm образца 1956 года шестибитный и определялся
>> как пучок одновременно передаваемых битов. ^M
>> То есть колебания от пяти до девяти бит, были
>> связаны:
>> 1. С ёмкостью шин передачи данных (8086 и 8088).
>> 2. С вместимостью для алфавитного символа.
>> 3. С желанием более детальной адресации.
>> Разрядность шин хотелось увеличивать, адресацию
>> детализировать (увеличивая разрядность адреса),
>> но при этом не терять выборку большего числа
>> битов за один такт. Два понятия (байт и слово)
>> заменили одно (ячейка) именно по этой причине.
>> Сейчас побеждает уникод, и алфавитная дефиниция
>> байта неуместна. А байт теперь восемь бит (с
>> контрольными десять). И восемь, похоже,
>> стабилизировались навсегда. Но дефиницией таки
>> не стали.
>Оно очень весело и совершенно запутано :)
> В Цэ как-то, типа, подразумевается,
> что char == byte.
1. typedef, и не всегда char. BYTE, например, беззнаковый.
2. Языковый тип byte не синоним понятию byte
в рассуждениях об архитектурах.
3. Сам Цэ появился, когда восьмибитный байт и
шестнадцатибитное слово уже стабилизировались.
Когда уже были всякие ASCII и EBCDIC.
> При этом char определен как минимально адресуемая
> единица и sizeof(char) обязан возвращать 1.
Тип char определён, а понятие byte таки нет.
> Исходя из этого в моем случае байт имеет 16 бит
> :) Более того, в своем руководстве по Цэ техасские
> приборы прямо говорят, что C2000 byte is 16 bit.
> Дословно.
> И символьная строка, которая "char []"
> у них определена именно так, но при этом каждый
> char 16-битный с нулем в старшем октете :)
Ничьи случаи никак не приближают к дефиниции понятия.
Существует этимология. Была эволюция от одной ячейки
к ячейкам двух размеров - байту и слову. Всё.
PS: Про наименьшую адресуемую я поначалу сказал сам.
Это хорошо известная ошибка, которую я тоже повторил.
Не подумавши.
Вот она:
http://stackoverflow.com/questions/437470/type-to-use-to-represent-a-byte-in-ansi-c89-90-c
char is always a byte , but it's not always an
octet. A byte is the smallest addressable unit of
memory (in most definitions), an octet is 8-bit
unit of memory.
В.Лапенков.