Какой тип переменной может содержать 1,000,000,000 (десятичное число), занимает больше всего места в памяти?Переменная, которая может содержать большую часть памяти?
- INT в C
- строку в C
- строку в Java (который использует юникод)
Какой тип переменной может содержать 1,000,000,000 (десятичное число), занимает больше всего места в памяти?Переменная, которая может содержать большую часть памяти?
Java, строка. Под капотом Java String состоит из объекта с 3 полями, один из которых указывает на отдельный объект массива, содержащий символы. Плюс, конечно, строки Java состоят из 16-битных символов.
Если вы беспокоитесь об использовании памяти по всем другим критериям, не используйте Java. Но для большинства приложений использование памяти является наименьшей из ваших проблем.
Следует отметить, что 1,000,000,000 может быть представлено с использованием Java int
, который будет иметь тот же размер, что и C-подписанное или беззнаковое (32-разрядное) целое число.
Кроме того, C int
является необязательно достаточно большой, чтобы представлять 1,000,000,000. На некоторых платформах int
- это 16 бит, и это разрешено стандартом C.
Y - для уточнения, C определяет int как собственный размер машинного слова (так что int может быть 16, 32 или 64 бит и т. Д.).Я думаю, что технически C int может быть самым неэффективным хранилищем для 1BN в сценарии с 512-битным машинным словом, но, надеюсь, я не буду рядом, чтобы это увидеть. – StuartLC
@nonnb - чтобы быть абсолютно технически корректным, стандарт C говорит, что диапазон 'int' составляет не менее -32758 до +32767. Это может быть (и часто) больше этого. Тем не менее, стандарт говорит * абсолютно ничего * о 'int' того же размера, что и« родное машинное слово ». –
честно, я не очень хочу, чтобы ответить на этот вопрос напрямую, так что вы можете иметь оглядывает здесь:
Также это может быть полезно, как конвертировать между двоичной и десятичной:
В стандарте C не указано много требований к хранению. Как это, вы могли бы:
int
s, которые занимают 32 байта для хранения ничего (см @ комментарий nonnb в)wchar_t[]
), который использует UCS-4/UTF -32 символов (как все реализации GNU делать, очевидно)char
с (который должен был бы быть в системе с 32-битовых байтов)Кстати, 21-бит-или-больше 'wchar_t' является единственным способом реализации C-совместимого варианта поддержки всех Unicode. Это также рекомендуется (см. Макрос __STDC_ISO_10646__ в C99). Реализации с 16-разрядным 'wchar_t' просто сломаны. –
как насчет многосимвольных последовательностей? как насчет UTF-8 и 16? – aib
домашнее задание? _____ – kennytm
Странный вопрос? Самое расточительное представление было бы строкой unicode, предполагая, что строка в C используется char [] – StuartLC
строки в C тоже могут быть unicode ... –