Как биты хранятся в памяти? (В блоках? Могут быть биты сохраненного toghether нескольких размеров?)

По-моему, вопрос: "Вы использование шаблон разработки?", один немного испорчен, потому что ответ - универсально ДА.

Позволяют мне объяснить, мы, программисты и разработчики, все шаблоны разработки использования..., мы просто не всегда понимаем его. Я знаю, что это звучит как clichГ©, но Вы не переходите к шаблонам, шаблоны прибывают к Вам. Вы разрабатываете материал, он мог бы быть похожим на существующий шаблон, Вы называете его тем путем, таким образом, все понимают то, о чем Вы говорите, и объяснение позади Вашего проектного решения более сильно, зная, что он был обсужден реклама nauseum прежде.

я лично использую шаблоны в качестве коммуникационного инструмента.Вот именно. Они не конструктивные решения, они не лучшие практики, они не инструменты на панели инструментов.

не понимают меня превратно, если Вы будете новичком, книги по шаблонам покажут Вам, как решение лучше всего решено с помощью их шаблонов, а не другого дефектного дизайна. Вы, вероятно, извлечете уроки из осуществления. Однако необходимо понять, что это не означает, что для каждой ситуации нужен соответствующий шаблон для решения его. Каждая ситуация имеет причуду тут и там, которая потребует, чтобы Вы думали об альтернативах и приняли трудное решение без идеального ответа. Это дизайн.

Антишаблон однако находятся на полностью различном классе. Вы на самом деле хотите к [1 112] активно , избегают антишаблонов. Вот почему антишаблон имени так спорен.

Для возвращения к исходному вопросу:
"Я использую шаблоны разработки?", Да!
"Я активно склоняюсь к шаблонам разработки?", №

7
задан Cobalt 9 October 2009 в 22:34
поделиться

7 ответов

Лучше поэкспериментировать на C и / или ассемблере, чем на Java. Эти языки являются низкоуровневыми и напрямую открывают адресное пространство.

Раньше я думал, что каждая память место содержит 8, 16, 32 или 64 биты. Таким образом, 0101 будет храниться в 8 битовая машина как 00000101 (расширенный знак если он был отрицательным). Все было хорошо и денди, пока я не написал программу на java из любопытства, чтобы узнать more inner workings of this system.

All memory locations in x86 systems contain 8 bits (1 byte). If a value contains more data than can fit into a single byte, it is stored using multiple bytes. For example, in C, the "float" type is stored using 4 bytes (32 bits).

All of it looks fine except for the space. It has 6 bits instead of 8. I'm now wondering how all of that information is stored in memory. If all of it was stored in 8 bit chunks, like

The space is also stored in a single byte. Your print code is forgetting to pad out to 8 spaces. 100000 == 00100000 == 0x20.

9
ответ дан 6 December 2019 в 06:14
поделиться

В пространстве тоже 8 бит. Просто Integer.toBinaryString не печатает ведущие 0 битов так, как вы его использовали.

Со всеми ведущими 0 битами в памяти это выглядит примерно так:

H : 01001000
e : 01100101
l : 01101100
l : 01101100
o : 01101111
  : 00100000
W : 01010111
o : 01101111
r : 01110010
l : 01101100
d : 01100100
7
ответ дан 6 December 2019 в 06:14
поделиться

Your original intuition was (mostly) correct: all memory locations consist of the same number of bits. On all modern machines, there are eight bits in a "byte", where a byte is the smallest chunk of memory that the machine can access individually.

Look closely at your output. You have seven digits in all of them except the space. The space just happens to begin with two zeroes in its binary representation, while the other letters begin with one.

4
ответ дан 6 December 2019 в 06:14
поделиться

То, как компьютеры хранят числа, можно сравнить с одометром в машине. Если одометр имеет 4 цифры, он сохраняет номер 33 как «0033».

Если кто-то спросит у вас, сколько у вас миль, вы не ответите « Поскольку типичный компьютер может работать с байтами намного быстрее, чем, скажем, с 7-битными числами или числами с переменными битами, хранение кодов ASCII в байтах является очень распространенным выбором для хранения текста.

Но позвольте мне вернуться к вашему вопросу.

Тогда не будет ли хранение небольшого числа в большом битовом пространстве тратить много битов?

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

Предположим, у вас есть только четыре буквенный алфавит (A, B, C, D) и использовать двухбитовые числа (00, 01, 10, 11 соответственно) для его представления. Если каждая из этих букв одинаково вероятна, то минимальное количество битов, необходимых для каждой буквы (в среднем), равно 2. Другими словами, нет потерянных битов, даже если A равно 00, а B равно 01.

С другой стороны, если вы используете ASCII и кодируете A, B, C, D как следующие 7-битные числа:

A: 1000001
B: 1000010
C: 1000011
D: 1000100

тогда вы «тратите» 5 бит на букву (даже если вы не «храните маленькие числа в большом битовом пространстве»).

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

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

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

3
ответ дан 6 December 2019 в 06:14
поделиться

На самом деле ваш подход неверен. Кодирование здесь очень важно.

Если вы используете ASCII, вы можете легко сказать, что каждый символ хранится в байте (восемь бит), но при изменении кодировки вы не можете этого сказать.

Например: UTF-8 использует один для три байта (от 8 до 24 бит) для каждого символа в строке. Вот почему вы увидите перегрузку, в которой вы можете указать кодировку для объекта inputstream.

Выбор неправильного входного потока абсолютно приведет к неправильному строковому выводу. Таким образом, вы должны знать кодировку файла, чтобы понимать, какой бит что означает. На самом деле fileinputstream делает это за вас.

Если вы сохраните цифру в виде строки, она займет на жестком диске длину символа. Точно так же, как другой символ.

Однако, если вы сохраните 123456789 в виде строки с кодировкой ASCII, это займет 9 * 8 бит = 72 бита.

Если вы сохраните это как целое число (обратите внимание, что ширина данных целого числа различается в разных средах) это займет всего 16 бит.

Также нельзя быть уверенным, что

H : 01001000
e : 01100101
l : 01101100
l : 01101100
o : 01101111
  : 00100000
W : 01010111
o : 01101111
r : 01110010
l : 01101100
d : 01100100
\n: 00001010

хранится на жестком диске как H: 01001000

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

Если вы сохраните цифру в виде строки, она займет длину символа на жестком диске. Точно так же, как другой символ.

Однако, если вы сохраните 123456789 как строку с кодировкой ASCII, это займет 9 * 8 бит = 72 бита.

Если вы сохраните это как целое число, (обратите внимание, что ширина данных целого числа отличается в разных средах) это займет всего 16 бит.

Также нельзя быть уверенным, что

H : 01001000
e : 01100101
l : 01101100
l : 01101100
o : 01101111
  : 00100000
W : 01010111
o : 01101111
r : 01110010
l : 01101100
d : 01100100
\n: 00001010

хранится на жестком диске как H: 01001000

Выбор неправильного входного потока абсолютно приведет к неправильной выводимой строке. Таким образом, вы должны знать кодировку файла, чтобы понимать, какой бит что означает. На самом деле fileinputstream делает это за вас.

Если вы сохраните цифру в виде строки, она займет длину символа на жестком диске. Точно так же, как другой символ.

Однако, если вы сохраните 123456789 в виде строки с кодировкой ASCII, это займет 9 * 8 бит = 72 бита.

Если вы сохраните это как целое число (обратите внимание, что ширина данных целого числа различается в разных средах) это займет всего 16 бит.

Также нельзя быть уверенным, что

H : 01001000
e : 01100101
l : 01101100
l : 01101100
o : 01101111
  : 00100000
W : 01010111
o : 01101111
r : 01110010
l : 01101100
d : 01100100
\n: 00001010

хранится на жестком диске как H: 01001000 e: 01100101 л: 01101100 л: 01101100 o: 01101111 : 00100000 Вт: 01010111 o: 01101111 г: 01110010 л: 01101100 d: 01100100 \ n: 00001010

Вы не можете быть уверены в этом. Файловая система не так проста. Может быть, Hello идет последовательно, но строка World находится в конце диска. Вот почему существует команда дефрагментации.

Но если мы говорим об основной памяти (RAM), когда вы определяете строку, я ожидаю, что биты будут последовательными. По крайней мере, в C это так. Вы определяете такую ​​строку.

char[100] value; // c is a char array. (there is no string type in c)

здесь значение [0] - это первый символ нашей строки. И значение обращается только к месту расположения массивов символов в памяти.

если адрес значения [0] равен 10, то адрес значения [1] равен 10 + 8 = 18.

3
ответ дан 6 December 2019 в 06:14
поделиться

Согласно API Java 4 ,

Целочисленное значение без знака - это аргумент плюс 232, если аргумент отрицательный; иначе это равно аргументу. Это значение преобразуется в строку цифр ASCII в двоичном формате. (основание 2) без дополнительных начальных нулей.

На самом деле, хранение данных намного сложнее. Для повышения эффективности обработки большинство типов данных хранятся на границах слов, что означает 4 байта на 32-битных машинах или 8 байтов на 64-битных машинах. Массивы могут быть упакованы более плотно, так что char [4] может в конечном итоге использовать тот же объем «фактического пространства», что и char .

Java - это виртуальная машина, и Я не уверен, какую архитектуру памяти он использует, если таковая имеется.

2
ответ дан 6 December 2019 в 06:14
поделиться

Это проясняет. Моя главная проблема заключалась в том, что вначале я упускал из виду нули. Я экспериментировал с этим, поскольку читал больше об алгоритмах сжатия (а именно, gzip) Я предполагал для всего этого ASCII. Увидеть представление не было целью программы, но различное количество бит в слове отбросило меня от первоначальной цели реализации базового сжатия на основе индекса для типа файла, над которым я работаю. Я попытаюсь переписать его на C, как только у меня будет доказательство концепции на Java.

Спасибо!

1
ответ дан 6 December 2019 в 06:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: