Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 44, средняя оценка - 4.84
nullbyte.dev
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
21.09.2011, 18:10     Битовые операции #1
Приветствую!
Изучаю C++, не могу освоить битовые операции (перемещение, исключающие или, инвертирование всякое). Просто не понимаю смысла, если не трудно, подкиньте хорошие ссылки, или книжки, доступные для новичков, ну или объясните доступным языком Также мне не понятно значение модификаторов signed и unsigned.

Кому не сложно прошу помочь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2011, 18:10     Битовые операции
Посмотрите здесь:

Битовые операции C++
битовые операции C++
Битовые операции C++
Битовые операции C++
Битовые операции, битовые поля. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Петррр
 Аватар для Петррр
5915 / 3352 / 333
Регистрация: 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;
nullbyte.dev
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
21.09.2011, 18:30  [ТС]     Битовые операции #3
То есть,
signed = положительное число
unsigned = отрицательное число
?
А битовые операции используются лишь тогда, когда необходима скорость или для написания драйверов, так? Поправьте если не так
no0ker
21.09.2011, 18:32
  #4

Не по теме:

ссылка

fasked
21.09.2011, 18:48
  #5

Не по теме:

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

soon
 Аватар для soon
2536 / 1301 / 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, по правилам форума не рекомендуется отправлять пользователей на поисковые системы. Лучше кинуть ссылку на уже существующую тему

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

Модификатор типа unsigned указывает, что переменная принимает неотрицательные значения. При этом самый левый бит области памяти, выделяемой для хранения значения, используется так же, как и все остальные биты области памяти - для представления значения.
А конкретно: где, когда и для чего используются эти модификаторы, то есть в чем их практическое применение?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.09.2011, 20:06     Битовые операции #8
Unsigned позволяет увеличить диапазон положительных чисел в 2 раза. Плюс программист может обьявить unsigned int вместо int, показывая тем самым, что переменная в принципе не может быть отрицательной(естественно, в самом коде он должен это учесть, чтобы вдруг не было переполнения), и, возможно, читающему код будет более понятен принцип работы программы.
nullbyte.dev
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
21.09.2011, 20:08  [ТС]     Битовые операции #9
soon, и всем остальным, спасибо, теперь все по полочкам
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
nullbyte.dev
0 / 0 / 0
Регистрация: 24.07.2011
Сообщений: 14
21.09.2011, 20:14  [ТС]     Битовые операции #11
Konyahinzhenya, да, я заметил это когда читал книгу, спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2011, 20:27     Битовые операции
Еще ссылки по теме:

Битовые операции C++
Битовые операции и операции смещения языка С C++
Битовые операции C++

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

Или воспользуйтесь поиском по форуму:
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
21.09.2011, 20:27     Битовые операции #12
Все эти операции с битами вам больше пригодились если бы Вы использовали ASM как язык программирования, так особо не переживайте насчёт того что сложно понять эту тему - Вам это вряд-ли особо пригодится, Вы только ознакомьтесь всё же полностью со всеми возможными битовыми операциями чтобы если встретите их в чужом коде то могли понимать что же там написано.

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

Текущее время: 05:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru