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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Побитовые операции 
V
    Опции темы
inside_pointer
Дата 11.3.2008, 04:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Описание темы не пишу, потому что оно сканирует форум и выключает все окна файрфокса.

Цитата из К&R

Цитата

Например, следующий оператор обнуляет все биты переменной n, кроме младших семи:
n = n & 0177


Вопросы:
что за младшие биты, а что есть старшие ещё, а бит знака как работает, он где слева или справа, при каких значениях бита знак будет минус при каких плюс?

Ещё:
Это что двоичное число или восьмеричное, если это восьмеричное, то оно переводится в двоичную а потом происходит операция сравнения битов?

Бывает ещё константы задаются в виде a = 01, b = 04 это какие числа, восьмеричные или какие-то другие?

Это сообщение отредактировал(а) inside_pointer - 11.3.2008, 04:17
PM MAIL   Вверх
korian
Дата 11.3.2008, 04:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

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



0123 - восмеричное
123 - десятичное
0x123 - шестнадцатиричное


Цитата(inside_pointer @  11.3.2008,  03:15 Найти цитируемый пост)
что за младшие биты, а что есть старшие ещё, а бит знака как работает, он где слева или справа, при каких значениях бита знак будет минус при каких плюс?

если брать 8-и битовое число
00000001 - младший бит (во всех системах измерения равно еденице)
10000000 - старший бит (128, 0200, 0x80)
если тип знаковый (signed), то старший бит является знаковым (установлен, если число отрицательное)

Цитата(inside_pointer @  11.3.2008,  03:15 Найти цитируемый пост)
Это что двоичное число или восьмеричное, если это восьмеричное, то оно переводится в двоичную а потом происходит операция сравнения битов?

в компах все представилено в двоичном виде. (все данные "переводятся" в двоичную форму, если можна так выразиться)

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

long a = -10; // 0xFFFFFFF6
a = a & 0x80000000; //a будет равно -2147483648 (0x80000000);
unsigned long b = 10; // 0x0000000A
b = b | 0x80000000; //b будет равно 2147483658 (0x8000000A);

для битовых операций есть смысл использовать 8-и или 16-иричные числа,
т.к. в 8-ричной системе 1 цифра отвечает за 3 бита (07 = 111)
а в 16-ричной 1 цифра отвечает за 4 бита (0xF = 1111)
в десятичной системе, таких зависимостей нету.

Это сообщение отредактировал(а) korian - 11.3.2008, 04:58
PM   Вверх
inside_pointer
Дата 11.3.2008, 05:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



спасибо, korian, исчерпывающе

0177

0 - признак восьмеричности, отбрасываем

177

раскладываем по тройкам

001 111 111

тут получилось 9 цифр, а в байте 8 бит, отбрасываем первый ноль

01 111 111

дальше n = n & 0177 превратилось в

n = n & 01 111 111

Цитата
 оператор обнуляет все биты переменной n, кроме младших семи 


значит младшие биты это те, которые справа, а старшие те, которые слева
левые - старшие
правые - младшие

правые семь бит не обнуляются, это в каком случае, когда n = 11 111 111 чтоли ?

там в книжке просто n и всё, не сказано чему равно
PM MAIL   Вверх
korian
Дата 11.3.2008, 05:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

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



Цитата(inside_pointer @  11.3.2008,  04:29 Найти цитируемый пост)
там в книжке просто n и всё, не сказано чему равно

в зависимости от n получаем результат
n = 012 //00001010
n = n & 0177 // 00001010 & 01111111 = 00001010
n = 0377 //11111111
n = n & 0177 // 11111111 & 01111111 = 01111111

т.е. при данной операции 7 младших битов будут такими же, как и у числа n
остальные биты будут нулями.
PM   Вверх
inside_pointer
Дата 11.3.2008, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всё терь понял до конца, спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0432 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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