Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Представить int ввиде байтов, и наоборот 
:(
    Опции темы
Quadruple
Дата 9.3.2005, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 4.11.2004

Репутация: нет
Всего: нет



Вот непойму, как при записи в файл, int, float, double, short, представляются ввиде байтов? Ведь размер байта: от -128 до 127. Например в int - 4 байта, и как ввиде байт представить число 1350691845, а потом его обратно в int? Я думаю, что при записи число как-то делится, вычитается и наверно в какой-нибудь последовательности, но ничего хорошего мне в голову так и непришло. Можт кто что знает по этому поводу?
PM   Вверх
chipset
Дата 9.3.2005, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Цитата(Quadruple @ 9.3.2005, 05:57)
Например в int - 4 байта, и как ввиде байт представить число 1350691845, а потом его обратно в int?

Поделить на куски битовой маской и смещением.
0xFF это ровно один байт.
Логически умножаем(|) число на 0xFF, получаем первый байт, сдвигаем число влево на байт (>>8), ещё раз логически умножаем на 0xFF, и так до победного конца.
Дальше - преобразования из инта в байт, но это уже наверное происходит где-то в низких слоях(чуть не сказал Сумрака smile ).

Это сообщение отредактировал(а) chipset - 9.3.2005, 17:42


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
setq
Дата 9.3.2005, 17:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











с этим проблем почти нет. число хранится в четырёх соседних байтах и занимает столько бит сколько требуется (с двоичным представлением, я думаю, ты знаком). знак (ИМХО) - это всегда самый правый бит старшего байта

ну а байты числа хранятся в памяти начиная с младшего если машина little endian и наоборот если big endian.

p.s intell - это little endian машина.
  Вверх
chipset
Дата 9.3.2005, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Соглашусь с setq. На низком уровне свободы в этом плане много больше smile



--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
DENNN
Дата 9.3.2005, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата(Quadruple @ 9.3.2005, 16:57)
Ведь размер байта: от -128 до 127.

smile Размер байта - 8 бит. Как ты их интерпретируешь - дело твое.

Цитата(Quadruple @ 9.3.2005, 16:57)
Например в int - 4 байта, и как ввиде байт представить число 1350691845, а потом его обратно в int? Я думаю, что при записи число как-то делится, вычитается и наверно в какой-нибудь последовательности,

Вот смотри. В арифметике всего 10 цифр- от 0, 1, 2, 3....9
У тебя ведь не вызывает затруднений записать большее число? smile
в одном байте можно записать любое целое положительное число от 1 до 255, либо 0. Если скажем нужно записать 257, то второй (по старшинству!) байт у нас будет равен 1, а первый (257-1*256)=1. Т.е. 0101 в шестнадцатеричной записи.
При записи отрицательных чисел первый бит обычно символизирует "минус", т.е. положительное число или отрицательное.
С трех или четырех байтными числами система та же.

Необходимо также помнить, что в памяти компьютера числа записываются наооборот: сначала младшие байты, затем старшие. Это связанно с архитектурой вычислительного устройства.


PM ICQ   Вверх
Quadruple
Дата 9.3.2005, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 4.11.2004

Репутация: нет
Всего: нет



Ого, спасибо! Счаз чего-нибудь насоображаю, если че, то приду за добавкой smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0731 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.