![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Quadruple |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 4.11.2004 Репутация: нет Всего: нет |
Вот непойму, как при записи в файл, int, float, double, short, представляются ввиде байтов? Ведь размер байта: от -128 до 127. Например в int - 4 байта, и как ввиде байт представить число 1350691845, а потом его обратно в int? Я думаю, что при записи число как-то делится, вычитается и наверно в какой-нибудь последовательности, но ничего хорошего мне в голову так и непришло. Можт кто что знает по этому поводу?
|
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Поделить на куски битовой маской и смещением. 0xFF это ровно один байт. Логически умножаем(|) число на 0xFF, получаем первый байт, сдвигаем число влево на байт (>>8), ещё раз логически умножаем на 0xFF, и так до победного конца. Дальше - преобразования из инта в байт, но это уже наверное происходит где-то в низких слоях(чуть не сказал Сумрака ![]() Это сообщение отредактировал(а) chipset - 9.3.2005, 17:42 --------------------
|
||||
|
|||||
setq |
|
|||
Unregistered |
с этим проблем почти нет. число хранится в четырёх соседних байтах и занимает столько бит сколько требуется (с двоичным представлением, я думаю, ты знаком). знак (ИМХО) - это всегда самый правый бит старшего байта
ну а байты числа хранятся в памяти начиная с младшего если машина little endian и наоборот если big endian. p.s intell - это little endian машина. |
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Соглашусь с setq. На низком уровне свободы в этом плане много больше
![]() --------------------
|
|||
|
||||
DENNN |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
![]()
Вот смотри. В арифметике всего 10 цифр- от 0, 1, 2, 3....9 У тебя ведь не вызывает затруднений записать большее число? ![]() в одном байте можно записать любое целое положительное число от 1 до 255, либо 0. Если скажем нужно записать 257, то второй (по старшинству!) байт у нас будет равен 1, а первый (257-1*256)=1. Т.е. 0101 в шестнадцатеричной записи. При записи отрицательных чисел первый бит обычно символизирует "минус", т.е. положительное число или отрицательное. С трех или четырех байтными числами система та же. Необходимо также помнить, что в памяти компьютера числа записываются наооборот: сначала младшие байты, затем старшие. Это связанно с архитектурой вычислительного устройства. |
||||
|
|||||
Quadruple |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 4.11.2004 Репутация: нет Всего: нет |
Ого, спасибо! Счаз чего-нибудь насоображаю, если че, то приду за добавкой
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |