C # Числовой тип данных Naming - PullRequest
       3

C # Числовой тип данных Naming

1 голос
/ 01 сентября 2010

Глядя на числовые типы данных C #, я заметил, что большинство типов имеют подписанную и неподписанную версию.Я заметил, что, в то время как целое число «по умолчанию», short и long подписаны, и имеют свой неподписанный аналог как uint, ushort и ulong;байт «по умолчанию» вместо этого является беззнаковым и имеет подписанный аналог в sbyte.

Просто из любопытства, почему байт так отличается от остальных?Была ли какая-то особая причина этого или «просто так»?

Надеюсь, вопрос не слишком запутанный из-за моих фраз и чрезмерного использования цитат.Хех ..

Ответы [ 4 ]

7 голосов
/ 01 сентября 2010

Я бы сказал, что байт не считается числовым типом, но определяет структуру с размером 8 бит. Кроме того, нет подписанного байтового понятия, оно не подписано. Числа, с другой стороны, вначале считаются подписанными, поэтому указание на то, что они не подписаны, что является менее распространенным, гарантирует префикс

[EDIT] Забыл, что есть подписанный байт (sbyte). Я полагаю, это довольно историческое и практическое применение. Ints встречаются чаще, чем UInts, а байты чаще, чем sbyte.

3 голосов
/ 01 сентября 2010

Исторически термины байт, клочок и бит указывают единицу памяти, мнемонику или код ... а не числовое значение. Имея отрицательные мегабайты памяти или добавляя ASCII-коды 1 и 2, ожидая код 3, довольно глупо. Во многих отношениях не существует такой вещи, как подписанный «байт». Иногда грань между «вещью» и «значением» очень размыта… как в большинстве языков, в которых байт рассматривается как вещь и значение.

1 голос
/ 01 сентября 2010

Это скорее степень искажения терминов. Байт не является по своей сути числовым в какой-либо форме, это просто единица хранения.

Однако байты, символы и 8-разрядные целые числа со знаком / без знака имеют свои имена взаимозаменяемо, где они, вероятно, не должны иметь:

  • Байт обозначает 8 бит данных, говорит ничего о формате данных.
  • Символ обозначает некоторые данные, которые хранит представление одного текстовый символ.
  • «UINT8» / «INT8» обозначает 8 битов данные в подписанном или неподписанном формате, хранение числовых целочисленных значений.
1 голос
/ 01 сентября 2010

В действительности все сводится к тому, чтобы быть интуитивным, а не последовательным.Вероятно, было бы чище, если бы .NET Framework использовала System.UInt8 и System.Int8 для согласованности с другими целочисленными типами.Но да, это кажется немного произвольным.

Для чего это стоит MSIL (который все языки .NET компилируются так или иначе) является более последовательным в том, что sbyte называется int8 и byteназывается unsigned int8, short называется int16 и т. д.

Но термин байт обычно используется не для описания числового типа, а скорее для набора из 8 битов, например при работе с файлами., сериализация, сокеты и т. д. Например, если Stream.Read работает с массивом System.Int8 [], это будет очень необычно выглядящий API.

...