|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
19.09.2014, 00:57 | #1 |
Пользователь
Регистрация: 31.07.2014
Сообщений: 48
|
Побайтовые операции, зачем они и как их понять?
Здравствуйте.
Изучаю C++ по книге Герберта Шилдта, дошел до ~210 страницы, там идет разговор о побайтовых операциях, которые позволяют работать с битами напрямую. Но, к сожалению смысл этой главы мне не ясен, я не понимаю что к чему там. Все что я знаю, это системы счисления, и то формулы преобразования не вспомню. Вопрос : Насколько нужно это изучать, и как вообще это понять, если в этой области я обладают только поверхностными знаниями в системах счисления. Или это дело нужно только для написания HEX'о-подобных программ и для побайтового сравнения файлов. P.S. Вопрос возможно глупый, но крайне важный, как по мне. P.S.P.S. Также очень интересно почему Шилдт с такой легкостью все объясняет там, будто читатели обязаны уже это знать все, говорит что надо 6 бит обнулить что бы перевести прописную в строчную и др., хотя вот мне сложно немного это осмыслить, но я все-таки понял суть этого "обнуления", понял что 01100110 и 01000110 различаются в 10 степени ровно на 32, а учитывая этот факт и факт разницы на 32 символа между строчными и прописными в ANSI таблицы можно тем самым перевести прописную в строчную. Но, тем не менее, я не понял особо почему для этого он применил вот такой код : ch = ch & 223; может объясните? Заранее спасибо за ответ. Последний раз редактировалось DakotaZ; 19.09.2014 в 01:05. |
19.09.2014, 01:30 | #2 |
Старожил
Регистрация: 02.03.2008
Сообщений: 2,499
|
223 в деятичной равно 11011111 в двоичной.
223(10)=11011111(2) То есть 0 - только в 3-м старшем разряде. Поэтому побитная операция И с 223 означает, что будет сброшен 3-й старший разряд в 0, а остальные не изменятся. Кстати, ch = ch & 223 - это простейший способ перевести в регистр больших букв. Если без побитных операций, то сложнее : " если ch - код моленькой буквы, то вычесть 32, а если нет то не надо ". А с побитыми - проще. Последний раз редактировалось type_Oleg; 19.09.2014 в 01:54. |
19.09.2014, 01:35 | #3 |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
Пойми, для начала, самое главное - вся цифровая информация хранится, обрабатывается и передаётся только в двоичном виде. Это закон природы, а не нечто рукотворное. ДНК в хромосомах всего живого несёт двоичный код! Да-да, именно так! Условный логический 0 - это кирпичик АТ (аденин-тимин, если не ошибаюсь), условная логическая 1 - это пара CG (цитозин-гуанин) (в терминах могу ошибиться, а лезть википедить влом).
Десятичное представление придумали уже человеки, ибо 10 пальцев на руках и всё такое. Разбиение на байты (по 8 бит), слова (16 бит), двойные слова (32 бита) и т.д. тоже придумали позднее для удобства. Да и то не сразу байт стал 8-битным по стандарту, были другие варианты. Если тебе это сейчас не надо, просто заложи книжку закладкой на 210-й странице. Даю гарантию 100% - если будешь писать программы, то эта закладка тебе пригодится. А пока запомни, что в килобайте не 1000 байт, а 1024. А также, что сдвиг влево на разряд - это умножение на 2, а вправо - деление на 2. В знаковых типах 1 в старшем бите означает знак минус, а остальные - инверсия числа по модулю. Вопрос правильный, неглупый. Вкуришь сам, на практике. З.Ы. Диапазон чисел, которые можно показать на пальцах двух рук - это [0...1023]. Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
19.09.2014, 02:50 | #4 | |
Пользователь
Регистрация: 31.07.2014
Сообщений: 48
|
Цитата:
Сейчас весь комментарий точно не прочитал, и ответы все не прочитал точно, потому что у меня ночь сейчас. Но вообще, лично по этой фразе мне кажется ты путаешь написание обычных программ(игры, плееры, трейнеры) от написания программ системного уровня(драйвера и др.). Просто ты сначала говоришь что это можно отложить пока не понадобится, а потом пишешь что без этого никак. Последний раз редактировалось DakotaZ; 19.09.2014 в 02:55. |
|
19.09.2014, 03:22 | #5 |
Старожил
Регистрация: 02.03.2008
Сообщений: 2,499
|
А почему так не даются побитовые операции? Ведь если понять двоичную арифметику ( двоичное представление и основные догические операции - И, ИДИ, НЕ), то все просто.
А не поняв двоичной арифметики, я не вижу смысла изучать C++. Можно конечно без нее обойтись для некоторых программ, даже без знания таблицы умножения можно обойтись. Или непонятно, зачем нужны побитные? С ними проще многие задачи решаются. Потому что, как уже написали, в компьютере ВСЯ информация в двоичном коде. То есть, фактически - ничего, кроме бит. |
19.09.2014, 03:34 | #6 |
Пользователь
Регистрация: 31.07.2014
Сообщений: 48
|
Наверное потому что я привык понимать, для чего конкретно что-либо требуется и почему делается именно так, а не как-то еще, дотошность - иными словами.
Можно тут подробнее, может статейку подкините, видеоурок или еще чего Это утверждение легко оспорить, не ASM же изучаю. Примеры в студию) |
19.09.2014, 09:35 | #7 |
Форумчанин
Регистрация: 14.12.2009
Сообщений: 716
|
Двоичная математика тебе навряд ли понадобиться в повседневном программирование за исключением если ты не пишешь к примеру игры, различные протоколы где особенно часто встречаются двоичные представления.
А так я считаю что каждый программист должен знать булеву математику, уметь быстро преобразовать числа из одной системы в другую ну или хотя бы базовые 2, 8, 10, 16 потому что никогда не знаешь то с чем завтра тебе предстоит столкнутся ну а такие базовые понятия в арсенале всегда должны быть. |
19.09.2014, 09:39 | #8 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Например, чтобы понять вот это:
Код:
|
19.09.2014, 09:49 | #9 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Цитата:
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
|
19.09.2014, 09:52 | #10 | |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Цитата:
Библиотеки существуют как-то отдельно от языка? И я утверждал что это не библиотека? Последний раз редактировалось 220Volt; 19.09.2014 в 09:55. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Массив потоков, и как они очищаются | Winexcel | Общие вопросы Delphi | 5 | 09.10.2013 16:43 |
Есть программа на c#, получены исходные коды рефлектором, как понять, что они нормальные и помогут доработать программу? | kpacaba | C# (си шарп) | 13 | 05.05.2012 11:59 |
Метки в Pascal/delphi. Зачем они? | Человек_Борща | Общие вопросы по программированию, компьютерный форум | 43 | 13.01.2012 09:21 |
Что такое коды ASCII и зачем они?? | Ларик | Помощь студентам | 2 | 27.01.2008 19:41 |
обновление в блоге - Ресурсы. Зачем они нужны. | Pblog | Обсуждение статей | 0 | 27.05.2007 03:17 |