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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Старшие и младшие биты/байты, Что да как? 
V
    Опции темы
Kuvaldis
Дата 16.11.2006, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


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

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



out51d3r, 
Код

//-------------------------------------------------    
#include <iostream>    
//-------------------------------------------------  
union num
{    
    struct    
    {    
        unsigned  bit0:1;    
        unsigned  bit1:1;    
        unsigned  bit2:1;    
        unsigned  bit3:1;    
        unsigned  bit4:1;    
        unsigned  bit5:1;    
        unsigned  bit6:1;    
        unsigned  bit7:1;    
    } byte;
    unsigned char integer;
};

int main(void)    
{    
// Число 1 в десятиричной с/с = 00000001 в двотчной с/с    
    
    num a;    
    
    a.byte.bit0 = 1;    
    a.byte.bit1 = 0;
    a.byte.bit2 = 0;    
    a.byte.bit3 = 0;
    a.byte.bit4 = 0;    
    a.byte.bit5 = 0;
    a.byte.bit6 = 0;    
    a.byte.bit7 = 0;

    std::cout << (int) a.integer;     return 0;
}

Код

 "Перевернутое" представление  используется и при хранении в памяти    
целых чисел размером в двойное слово:  в первом его байте  размещаются    
младшие 8 битов числа, во втором байте - предыдущие 8 битов и т.д. На-    
пример, число 12345678h хранится в памяти так:    
               ---------------------    
               | 78 | 56 | 34 | 12 |    
               ---------------------    
Другими словами,  в первом слове  двойного слова  размещаются  младшие    
(правые) 16 битов числа, а во втором слове - старшие 16 битов,  причем    
в каждом из этих двух слов  в свою очередь используется "перевернутое"    
представление.    
    Такое необычное представление чисел объясняется тем,  что в первых    
моделях ПК  за раз можно было считать из памяти только один байт и что    
все арифметические операции  над  многозначными числами  начинаются  с    
действий над младшими цифрами, поэтому из памяти в первую очередь надо    
считывать младшие цифры, если сразу нельзя считать все цифры. Учитывая    
это,  в первых ПК и стали размещать младшие цифры числа перед старшими    
цифрамми, а ради преемственности такое представление чисел сохранили в    
последующих моделях ПК.    
    Конечно,  "перевернутое" представление неудобно для людей,  однако    
при использовании  языка ассемблера  это неудобство не чувствуется:  в    
MASM все числа записываются в нормальном, неперевернутом виде (см. ни-    
же).


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


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
out51d3r
Дата 16.11.2006, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Блин, что-то тут я совсем запутался... Можно тут еще раз как нибудь по "русски", хотябы на премере с маленькой цифрой...


и как Вы так быстро считаете 16-тиричные числа? Я только знаю, что FF - это 255)))))))


Это сообщение отредактировал(а) out51d3r - 16.11.2006, 18:18
PM MAIL   Вверх
MAKCim
Дата 16.11.2006, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата

Блин, что-то тут я совсем запутался... Можно тут еще раз как нибудь по "русски", хотябы на премере с маленькой цифрой... 

вот память
[__]        [__]        [__]        [__]        [__]
0 байт    1 байт   2 байт    3 байт   4 байт
вот число - 12347, двоичное представление 00110000 00111011
младший байт 00111011, старший - 00110000, если это слово загрузить в память по 0-му адресу получим
00111011   00110000
[__]            [__]
0 байт        1 байт


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
out51d3r
Дата 16.11.2006, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А нумерация разрядов сохраняется или тоже переварачивается? А если это не слово, а двойное слово (например число типа int)?
PM MAIL   Вверх
JackYF
Дата 16.11.2006, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Конечно, ничего не переворачивается. Все сохраняется и идет дальше.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 16.11.2006, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата

А нумерация разрядов сохраняется или тоже переварачивается? А если это не слово, а двойное слово (например число типа int)? 

пусть есть число типа int
10010011  11110000  01010101  00001111
00001111 - младший (0-ой байт), 01010101 - 1-ый байт и т. д
тогда в памяти оно располагается так
00001111    01010101    11110000    10010011
[__]             [__]             [__]             [__]
0 байт        1 байт         2 байт        3 байт
нумерация разрядов в каждом байте справа-налево
т. е если рассматривать о-ой байт данного примера, то
0  0  0   0  1   1  1  1
7  6  5  4  3  2  1  0 (разряды)

Это сообщение отредактировал(а) MAKCim - 16.11.2006, 18:35


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
out51d3r
Дата 16.11.2006, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Неужели у меня в бошке что-то стало вариться))))  smile 
Уже более-менее понятно)

Например, если я напишу так: int a=0xCCDDEEFF; то
FF - младший байт (нулевой)
EE - тоже младший байт (первый),
DD - старший байт (второй),
CC - тоже старший байт (третий).

В памяти (физически), он расположется так: FF EE DD CC. Так же останется нумерация байтов FF-0, EE-1, DD-2, CC-3.

Ну что, так?
PM MAIL   Вверх
Kuvaldis
Дата 16.11.2006, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


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

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



out51d3r, 
Цитата

Ну что, так?

Да


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
out51d3r
Дата 16.11.2006, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну наконец-то!!!

И последнее, как Вы так быстро переводите числа из 16-чной в двоичную? Или это сказывается на опыте?


P.S.:
Наверное, я Вам уже надоел, но тем неменее, ОГРОМНОЕ ВСЕМ СПАСИБО (в частности Максиму и ДжекуФ, Кувалдису), за то, что помогли мне... Настанет время, я буду тоже так же мучаться)))


Еще раз, СПАСИБО!!!

Это сообщение отредактировал(а) out51d3r - 16.11.2006, 18:59
PM MAIL   Вверх
JackYF
Дата 16.11.2006, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(out51d3r @  16.11.2006,  18:55 Найти цитируемый пост)
И последнее, как Вы так быстро переводите числа из 16-чной в двоичную? Или это сказывается на опыте?


Каждый разряд 16-системы представляет собой 4 разряда двоичной...
Ну а 16 двоичных значений для 0-F - да, запоминаем со временем...



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Daevaorn
Дата 16.11.2006, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(JackYF @  16.11.2006,  17:51 Найти цитируемый пост)
Вот есть слово - 16 бит

Ты программируешь под Dos?;)
PM MAIL WWW   Вверх
JackYF
Дата 16.11.2006, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Таки нет. Давно уже нет.
Слово - 16 бит.
Двойное слово - 32 бита...

Что-то не так?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Daevaorn
Дата 16.11.2006, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Просто в  IA-32 "слово" это 32 бита, а у архитектуры x86-64 - 64 бита
PM MAIL WWW   Вверх
JackYF
Дата 16.11.2006, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Сколько программирую - слово = 2 байта = 16 бит. smile
А как тогда в архитектуре IA-32 называется память размером 16 бит?

И почему, ИМХО, в этих архитектурах начали изменять понятия, которые уже устоялись... Любой программер на вопрос длины слова, думалось мне, ответит 2 байта, а не 4...


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 16.11.2006, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



JackYF, 
просто есть такое понятие как "машинное слово" - максимальная порция данных, которую процесор может обработать за одну операцию
так вот в IA-32 - это 32 бита

Это сообщение отредактировал(а) MAKCim - 16.11.2006, 21:10


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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