| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Как работает этот небольшой код? |
| Автор: PascalC 26.3.2009, 00:30 | ||
Есть такой код: генерирует набор подмножеств в виде {A1, ..., Am}, где m от 1 до n
не совсем понятно, что обозначает запись вида 1<<n и k >>= 1 и еще k&0x1 это я так понял побитовое сложение с единицей? объясните пожалуйста, как работает данный код |
| Автор: PascalC 26.3.2009, 00:43 |
| спасибо |
| Автор: bsa 26.3.2009, 01:27 |
| k&0x1 - это побитовое "И", т.е. в данном случае выделение из k младшего разряда, фактически это получится флаг нечетности. |
| Автор: azesmcar 26.3.2009, 10:02 | ||
точно, а другими словами - умножает на два n раз. например ( 1 << 5 ) == 32 а смещение вправо - делит на 2 например ( 20 >> 2 ) == 5 |
| Автор: GoldFinch 26.3.2009, 10:18 |
| azesmcar, на троичной машине он будет умножать на 3^n а не на 2^n поэтому эта операция называется сдвиг а не умножение\деление и не "на 1 бит" а "на 1 разряд" =\ |
| Автор: mes 26.3.2009, 10:25 | ||
т.е Си-программа откомпилированная на троичной машине даст иной результат ?! |
| Автор: azesmcar 26.3.2009, 10:26 | ||||
GoldFinch, вы видели троичные машины? звучит как научная фантастика
а где я говорил что эта операция называется деление? Добавлено через 6 минут и 3 секунды а вообще - это так..если уж играем в слова Бит (англ. binary digit)
http://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82 и троичные машины по моему звучит странно. |
| Автор: Anikmar 26.3.2009, 10:50 |
Главное, чтобы поняли правильно. На самом деле сплошь и рядом кто как называет. Например http://xlibscripts.land.ru/jscript_doc/JavaScript/OperatorsJS.html http://ru.wikibooks.org/wiki/Ruby/Подробнее_о_числах http://ad.cctpu.edu.ru/cpp/glava3_5.htm http://www.intuit.ru/department/pl/perl/3/3.html Многие то так то так говорят, а как говорит стандарт - в прикрепленном файле (не дает акробат копировать) |
| Автор: GoldFinch 26.3.2009, 11:26 | ||
mes, ну логичнее всего что на троичной платформе операция поразрядного сдвига будет сдвигать на троичные разряды, а не умножать\делить на 2
прям скажем не очень-то авторитетные источники а вот это лол) |
| Автор: azesmcar 26.3.2009, 11:29 | ||
тут говорится что операция смещение вправо называется делением или говорится что смещение вправо делит на два? думайте... |
| Автор: Albor 26.3.2009, 11:29 |
GoldFish, для общего развития, в чём разница при двоичном представлении числа (ведь именно в таком виде число хранится в памяти)? Честно сказать, я не помню различий между этими терминами, правда курс ЦЭВМ изучался мною довольно давно, может с тех пор что-то изменилось. |
| Автор: azesmcar 26.3.2009, 11:30 | ||||
а что тут именно вам показалось смешным? Добавлено @ 11:31
приведите авторитетные. А стандарт С++ для вас недостаточно авторитетен? |
| Автор: GoldFinch 26.3.2009, 11:43 |
| в советской\российской терминологии (и на пост-советском пространстве наверное тоже) бит и двоичный разряд это разные понятия двоичный разряд, десятичный разряд, разряд в позиционной системе счисления с целым основанием n - это величина которая может принимать n различных значений, и имеет некоторый вес зависящий от позиции разряда в числе бит - это единица измерения количества информации иногда битом называют двоичный разряд (по аналогии с зарубежным Binary digIT), и наверное в ряде случаев это допустимо, но правильнее называть двоичный разряд двоичным разрядом пример различия этих терминов - "в переменой типа bool 32 (двоичных) разряда" "в переменой типа bool 1 бит (информации)" Добавлено через 2 минуты и 16 секунд мы же пишем "бит" а не "bit", русского перевода стандарта С++ вроде бы нет |
| Автор: mes 26.3.2009, 11:47 | ||
неа.. не логично, потому что операция - двоичный сдвиг ( сдвиг двоичного разряда ) первое правильнее, именно на один бит, а не на некий абстрактный разряд. |
| Автор: GoldFinch 26.3.2009, 11:50 |
что автор не знает ни что такое "двоичный" триггер, ни что такое 1 бит или 1 двоичный разряд |
| Автор: azesmcar 26.3.2009, 12:07 | ||||
что-то я не припомню чтобы автор описывал что такое двоичный триггер. Это описано вот http://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D1%82%D1%80%D0%B8%D0%B3%D0%B3%D0%B5%D1%80 и описано довольно таки на уровне..если у вас есть замечания - приводите аргументы, не бросайтесь словами - "автор не знает что такое триггер". Я во всяком случае считаю что знаю и согласен с тем что описывает вышеупомянутая ссылка.
вы утверждаете что бит и bit - разные слова и имеют разные значения? |
| Автор: Albor 26.3.2009, 12:11 |
| Вобщем то, не стоит спорить, так как на эти термины есть разные взгляды http://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82 |
| Автор: azesmcar 26.3.2009, 12:18 | ||
как на них не смотри..операция << называется операцией двоичного сдвига. т.е. вести себя она должна по любому так же как ведет на любой другой платформе..я уж не говорю о том что троичные компьютеры - это давняя разработка - причем ее давно оставили, хотя и предполагают к ней вернутся "когда нибудь в будущем". |
| Автор: vinter 26.3.2009, 12:29 |
| в последнее время эта ветка просто заполонена словоедами и оптимизаторами. Господа, может быть не будем отвлекатся, а будем отвечать на посталенные вопросы, без показывания всем, вашей блестящей эрудиции |
| Автор: Anikmar 26.3.2009, 12:52 | ||||
Собственно именно это я хотел сказать.
Главное, что ТС понял о чем речь. |
| Автор: azesmcar 26.3.2009, 13:03 | ||
а я плохо представляю себе работу синхрофазатрона, но все же он работает |
| Автор: mes 26.3.2009, 13:04 |
там ошибку внес при редактировании и сразу не заметил так как отвлекли.. исправил a как относитесь к двоичному И. Та же самая логика названия. |