Привет!!

Как программист, основные типы данных, с которыми мы учимся работать, являются примитивными.

Наиболее распространенные примитивные типы данных показаны на диаграмме ниже.

Мы также узнаем, сколько памяти занимает каждая переменная каждого типа данных при хранении в памяти для языка, который мы изучаем.

Но то, что нам редко удается узнать, — это сравнительная таблица требований к памяти для переменной определенного типа данных.

Только недавно у меня появилась возможность изучить сравнение требований к памяти для символьной переменной языка C с требованиями к памяти для символьной переменной языка Java.

По-видимому, размер памяти, занимаемый символом C, не совпадает с размером памяти, занимаемым символом Java!

Схематическое представление памяти, необходимой для символа C и Java, показано ниже.

Это бросает вопрос в наши умы не так ли?

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

Затем,

Почему более продвинутый язык, такой как Java, требует больше места для хранения символов?

Вот ответ на этот вопрос!!

C использует формат кодировки ASCII, а Java использует формат кодировки UTF-8.

Это был однострочный ответ на однострочный вопрос. Но затем давайте углубимся в это и узнаем, как именно C оказался всего в 1 байте, а Java — в 2 байта.

Итак, для начала, вот простая формула преобразования —

Однако важность этой формулы мы рассмотрим позже…

Я уверен, что каждый из вас знает, что ваш компьютер понимает только два сигнала, а именно ВЫКЛ. и ВКЛ.. Простое объяснение этому состоит в том, что это электронное устройство, которое либо ток/сигнал или нет.

Те же OFF и ON представлены в более простой форме как 0 и 1 соответственно, что мы знаем как двоичный язык или машинопонятный язык.

Следовательно, если предположить, что в мире существует всего два алфавита, мы могли бы легко представить их в двоичной форме, используя приведенную ниже таблицу:

Теперь предположим, что в мире существует всего 4 алфавита, поэтому их двоичное представление будет примерно таким:

Точно так же, если у нас есть 8 алфавитов и представление их в двоичном виде будет —

Идея здесь в том, что для представления каждых 2^n символов требуется n битов, то есть для 2¹ символов требуется только 1 бит памяти, для 2² символов нам нужно 2 бита в памяти, для 2³ символов нам нужно 3 бита памяти. памяти, и серия продолжается.

Следовательно, мы можем вывести другую формулу —

Теперь поговорим о форматах кодировки ASCII и UTF-8.

ASCII или Американский стандартный код для обмена информацией — наиболее распространенный формат кодирования. Он представляет только 128 различных символов/команд.

Вот таблица символов ASCII —

Что касается UTF-8 или формата преобразования Unicode — 8-битный, он способен представлять1 112 064 допустимых кодовых точки символов с использованием 17 плоскостей, каждая из которых состоит из 65 536 символов.

Другими словами,

ASCII → 128 символов → 2⁷ символов → 7 бит

UTF-8 → 65536 символов в одной плоскости → 2¹⁶ символов → 16 бит

Теперь, чтобы привести его к стандартному округленному значению, ASCII использует один дополнительный бит в своем представлении, поэтому он достигает 8 бит, в то время как UTF-8 уже имеет стандартное округленное значение.

Преобразование этих битов в байты (используя исходную формулу)—

ASCII → 8 бит → 1 байт

UTF-8 → 16 бит → 2*8 бит → 2 байта

Следовательно,

C, который использует представление ASCII для своего типа данных char, занимает 1 байт памяти,

пока,

Java, использующая представление UTF-8 для своего типа данных char, занимает 2 байта памяти.

Надеюсь, сегодня вы чему-то научились!!