Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 44, средняя оценка - 4.84
nullbyte.dev
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
#1

Битовые операции - C++

21.09.2011, 18:10. Просмотров 5573. Ответов 11
Метки нет (Все метки)

Приветствую!
Изучаю C++, не могу освоить битовые операции (перемещение, исключающие или, инвертирование всякое). Просто не понимаю смысла, если не трудно, подкиньте хорошие ссылки, или книжки, доступные для новичков, ну или объясните доступным языком Также мне не понятно значение модификаторов signed и unsigned.

Кому не сложно прошу помочь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2011, 18:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Битовые операции (C++):

Битовые операции, битовые поля. - C++
Здравствуйте! Еслть 4 диапазона чисел: 0-100, 0-100, 0-6000, 0-3. Сделать в виде битовых операций. Записать в unsigned int. Использовать...

Битовые операции и операции смещения языка С - C++
Доброго времени суток господа,помогите пожалуйста.Есть 2 кода к задаче,первый работает верно(переводит обычные числа в 16-ти ричные),а...

Битовые операции - C++
Ребят, нужен алгоритм, а желательно и код для реализации следующей функции: Есть скажем числа от 0 до 7, т.е. 8 (2^3) Теперь...

Битовые операции - C++
Ребят, помогите кто чем может. Дана строка unsigned char. Необходимо через каждых 4 бита вставить 1, при этом ничего не затерев. ...

Битовые операции - C++
Собсно,если используется 4 байтовая переменная,то почему она представлена 16 битами(1010 0110 0010 0110),а не 32 битами?

Битовые операции - C++
Всем привет! Помогите решить интересную задачу! Нужно ниже указный код переписать без условных операторов используя только битовые операции...

11
Петррр
5970 / 3407 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
21.09.2011, 18:24 #2
signed и unsigned - знаковое и беззнаковое. Число может быть со знаком и без знака. Т.е. положительные и отрицательные числа.

Битовые операции работают быстро. Процессор быстрее выполнит:
C++
1
int num = 12 << 1;
чем:
C++
1
int num = 12 * 2;
2
nullbyte.dev
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
21.09.2011, 18:30  [ТС] #3
То есть,
signed = положительное число
unsigned = отрицательное число
?
А битовые операции используются лишь тогда, когда необходима скорость или для написания драйверов, так? Поправьте если не так
0
no0ker
21.09.2011, 18:32
  #4

Не по теме:

ссылка

0
fasked
21.09.2011, 18:48
  #5

Не по теме:

no0ker, дешевый фэйк http://tinyurl.com/3roxktk

1
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.09.2011, 18:49 #6
Unsigned беззнаковое.
Sign - знак, приставка un- играет роль отрицания.
Это ведь так просто, нужно всего лишь
А) знать английский на уровне "чуть-чуть понимаю"
B) залезть в гугл. Там есть переводчик, не считая поисковика.

А касательно побитовых операций.
Из названия понятно, что операции производятся над битами. Как известно, любое число можно представить в виде последовательности битов. К примеру, возьмем число 12. В двоичном коде его можно представить как 1100.
При побитовом сдвиге вправо на одну цифру, число делится на 2, кра,няя правая цифра отбросится. То есть получится число 110 или, в 10-й системе счисления - 6.
Аналогично, при побитовом сдвиге влево, мы получим 24, или 11000. Последний бит будет равен нулю.
Также существуют другие побитовые операции, к примеру &(именно &, а не && - не путать!)
1010 & 1101 = 1000.
Последовательно сравниваются все биты. Если у обоих чисел, бит #i будет равен 1, то в результирующую переменную, на место i-го бита, запишется 1, в противном случае 0.

Не по теме:

no0ker, по правилам форума не рекомендуется отправлять пользователей на поисковые системы. Лучше кинуть ссылку на уже существующую тему

2
nullbyte.dev
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
21.09.2011, 19:58  [ТС] #7
Вот кое-что нашел, теперь понял:
Модификатор типа signed указывает, что переменная может принимать как положительные, так и отрицательные значения. Возможно, что при этом самый левый бит области памяти, выделяемой для хранения значения, используется для представления знака. Если этот бит установлен в 0, то значение переменной считается положительным. Если бит установлен в 1, то значение переменной считается отрицательным.

Модификатор типа unsigned указывает, что переменная принимает неотрицательные значения. При этом самый левый бит области памяти, выделяемой для хранения значения, используется так же, как и все остальные биты области памяти - для представления значения.
А конкретно: где, когда и для чего используются эти модификаторы, то есть в чем их практическое применение?
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.09.2011, 20:06 #8
Unsigned позволяет увеличить диапазон положительных чисел в 2 раза. Плюс программист может обьявить unsigned int вместо int, показывая тем самым, что переменная в принципе не может быть отрицательной(естественно, в самом коде он должен это учесть, чтобы вдруг не было переполнения), и, возможно, читающему код будет более понятен принцип работы программы.
1
nullbyte.dev
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
21.09.2011, 20:08  [ТС] #9
soon, и всем остальным, спасибо, теперь все по полочкам
0
Konyahinzhenya
-23 / 1 / 0
Регистрация: 20.09.2011
Сообщений: 32
21.09.2011, 20:12 #10
Если на примере объяснить то смотри...
long int - диапазон будет от -2 147 483... до + 2 147 483
есле же unsigned long int то от 0 до 4 294 967
1
nullbyte.dev
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
21.09.2011, 20:14  [ТС] #11
Konyahinzhenya, да, я заметил это когда читал книгу, спасибо.
0
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
21.09.2011, 20:27 #12
Все эти операции с битами вам больше пригодились если бы Вы использовали ASM как язык программирования, так особо не переживайте насчёт того что сложно понять эту тему - Вам это вряд-ли особо пригодится, Вы только ознакомьтесь всё же полностью со всеми возможными битовыми операциями чтобы если встретите их в чужом коде то могли понимать что же там написано.

Цитата Сообщение от Петррр Посмотреть сообщение
Битовые операции работают быстро. Процессор быстрее выполнит:
Код C++1 int num = 12 << 1;
чем:
Код C++1 int num = 12 * 2;
Хороший компилятор из обоих кодов сделает тоже самое в обоих случаях в виде машинного кода. Не нужно использовать именно такую "оптимизацию" сейчас в коде как умножение на число в виде сдвига, оставьте это дело компилятору. Но это не упрёк (так как в действительности если отключить в компиляторе "оптимизацию" то первый код и правда выполнится быстрее и разрабатывай мы код для каких-то серьёзных целей вроде военной техники мы бы наверняка отключили бы всю "оптимизацию" от компилятора и нам бы пришлось... но это я уже далеко отошёл от темы ), а просто информация.
1
21.09.2011, 20:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2011, 20:27
Привет! Вот еще темы с ответами:

Битовые операции - C++
Вот такая вот лаба на С, уже как не думал ну не могу решить я ее. Прошу помочь, прикрепил полное задание с примером работы(в примере...

Битовые операции - C++
Дано задание : Ввести последовательность из 8-ми символов. Если сумма единиц в представлении символа нечетная, то заменить 2 старших бита...

Битовые операции - C++
помогите написать программу в консоли... я вообще не знаю эту тему и не знаю ка делать... вот, задача.. Создайте программу,...

Битовые операции - C++
Задача. Я не понимаю что тут делать. Кто то что то понимает? Элементарное я понимаю сдвиги и прочее но это вообще:wall: Умоляю,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru