Подтвердить что ты не робот

Почему char занимает 2 байта, поскольку он может храниться в одном байте

может кто-нибудь сказать мне, что в С# почему char занимает два байта, хотя он может храниться в одном байте. Разве вы не думаете, что это потеря памяти. если нет, то как используется дополнительный 1-байтовый? в простых словах..пожалуйста, дайте мне понять, что такое дополнительные 8 бит.!!

4b9b3361

Ответ 1

хотя он может храниться в одном байте

Почему вы думаете, что?

Для представления каждого символа на английском языке требуется только один байт, но на других языках используются другие символы. Рассмотрим количество разных алфавитов (латинский, китайский, арабский, кириллический...) и количество символов в каждом из этих алфавитов (не только буквы или цифры, но и знаки препинания и другие специальные символы)... есть десятки тысяч различных символов, используемых в мире! Таким образом, одного байта никогда не будет достаточно, чтобы представить их всех, поэтому был создан стандарт Unicode.

Unicode имеет несколько представлений (UTF-8, UTF-16, UTF-32...). Строки .NET используют UTF-16, который принимает два байта на символ (на самом деле, кодовые точки). Конечно, двух байтов все еще недостаточно, чтобы представлять все разные символы в мире; суррогатные пары используются для представления символов выше U + FFFF

Ответ 2

Ключевое слово char используется для объявления символа Юникода в диапазоне, указанном в следующей таблице. Символы Unicode - это 16-разрядные символы, используемые для представления большинства известных письменных языков во всем мире.

http://msdn.microsoft.com/en-us/library/x9h8tsay%28v=vs.80%29.aspx

Ответ 3

Юникод. Правда, у нас достаточно места в 8 бит для английского алфавита, но когда дело доходит до китайского и так, это занимает гораздо больше персонажей.

Ответ 4

В С#, char являются 16-разрядными символами Unicode по умолчанию. Unicode поддерживает гораздо больший набор символов, чем может быть поддержан ASCII.

Если память действительно вызывает беспокойство, вот хорошее обсуждение SO о том, как вы можете работать с 8-битными символами: Есть ли тип строки с 8 символами BIT?

Ссылки:

В С# char datatype: http://msdn.microsoft.com/en-us/library/x9h8tsay(v=vs.80).aspx

В Юникоде: http://en.wikipedia.org/wiki/Unicode

Ответ 5

потому что utf-8, вероятно, еще слишком молод для Microsoft, чтобы рассмотреть возможность его использования