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

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

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

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

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

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

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

битовые операции - C++
как из 0001 0000 тоесть в dec '8' сделать 0000 0001 в dec '1'?

Битовые операции - C++
Доброго времени суток! Есть задача: Даны два целых без знаковых числа. Остатки от деления их на 16 заносятся соответственно в 4 младших и...

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

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

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

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

Битовые операции - C++
Есть код signed int a = 10; a = !a; cout << a; Выводит 0, объясните, почему??

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Петррр
5946 / 3383 / 336
Регистрация: 28.10.2010
Сообщений: 5,927
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
2540 / 1305 / 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
2540 / 1305 / 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++
Добрый день! Помогите пожалуйста написать программу. Дано короткое целое неотрицательное число(2 байта). Выполнить инверсию ...

Битовые операции - C++
Здраствуйте, помогите, пожалуйста! Надо написать три функции, используя только битовые (для первых двух) и только битовые и...

Битовые операции - C++
#include&lt;iostream&gt; #include&lt;climits&gt; int main() { unsigned int a = UINT_MAX; unsigned short b = USHRT_MAX; std::cout &lt;&lt;...

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

Битовые операции - C++
Не могу разобраться с 4 заданием Реализовал пятое но не в одну строчку и без понятия как сделать в одну П.5.18.Правил Запрещено...


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

Или воспользуйтесь поиском по форуму:
Gepar
1175 / 531 / 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;
Хороший компилятор из обоих кодов сделает тоже самое в обоих случаях в виде машинного кода. Не нужно использовать именно такую "оптимизацию" сейчас в коде как умножение на число в виде сдвига, оставьте это дело компилятору. Но это не упрёк (так как в действительности если отключить в компиляторе "оптимизацию" то первый код и правда выполнится быстрее и разрабатывай мы код для каких-то серьёзных целей вроде военной техники мы бы наверняка отключили бы всю "оптимизацию" от компилятора и нам бы пришлось... но это я уже далеко отошёл от темы ), а просто информация.
Yandex
Объявления
21.09.2011, 20:27     Битовые операции
Ответ Создать тему
Опции темы

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