Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как работает этот небольшой код? Что означает запись 1<<n и k >>= 1? 
V
    Опции темы
PascalC
Дата 26.3.2009, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 19.10.2008

Репутация: нет
Всего: нет



Есть такой код: генерирует набор подмножеств в виде {A1, ..., Am}, где m от 1 до n
Код

#include <stdio.h>

int main()
{
int n, l, i, k;

printf("n = ");
scanf("%d",&n);

for (l = 0; l < (1<<n); l++){
    printf("{");
    k =l;
    for (i = 1;i <= n; i++, k >>= 1){
        if (k&0x1)
            printf(" A%d", i);

    }
    printf("}\n");
}
}

не совсем понятно, что обозначает запись вида 1<<n и k >>= 1 
и еще k&0x1 это я так понял побитовое сложение с единицей?
объясните пожалуйста, как работает данный код
PM MAIL   Вверх
Anikmar
Дата 26.3.2009, 00:35 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(PascalC @  26.3.2009,  00:30 Найти цитируемый пост)
не совсем понятно, что обозначает запись вида 1<<n и k >>= 1 
и еще k&0x1 это я так понял побитовое сложение с единицей?
объясните пожалуйста, как работает данный код 


1 << n Сдвинуть 1 на n бит влево.

k >>= 1

Сокращенная запись:
k = k >> 1

Сдвинуть k на 1 бит вправо
PM MAIL ICQ   Вверх
PascalC
Дата 26.3.2009, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 19.10.2008

Репутация: нет
Всего: нет



спасибо
PM MAIL   Вверх
bsa
Дата 26.3.2009, 01:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



k&0x1 - это побитовое "И", т.е. в данном случае выделение из k младшего разряда, фактически это получится флаг нечетности.
PM   Вверх
azesmcar
Дата 26.3.2009, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

1 << n Сдвинуть 1 на n бит влево.


точно, а другими словами - умножает на два n раз.
например ( 1 << 5 ) == 32

а смещение вправо - делит на 2
например ( 20 >> 2 ) == 5
PM   Вверх
GoldFinch
Дата 26.3.2009, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



azesmcar, на троичной машине он будет умножать на 3^n а не на 2^n
поэтому эта операция называется сдвиг а не умножение\деление


и не "на 1 бит" а "на 1 разряд" =\
PM MAIL ICQ   Вверх
mes
Дата 26.3.2009, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(GoldFinch @  26.3.2009,  09:18 Найти цитируемый пост)
на троичной машине он будет умножать на 3^n а не на 2^n
поэтому эта операция называется сдвиг а не умножение\деление


и не "на 1 бит" а "на 1 разряд" =\ 

т.е Си-программа откомпилированная на троичной машине даст иной результат ?!  smile 



--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 26.3.2009, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



GoldFinch, вы видели троичные машины? звучит как научная фантастика  smile

Цитата

поэтому эта операция называется сдвиг а не умножение\деление


а где я говорил что эта операция называется деление?

Добавлено через 6 минут и 3 секунды
а вообще - это так..если уж играем в слова

Бит (англ. binary digit)
Цитата

1. Один разряд двоичного кода (двоичная цифра). Может принимать только два взаимоисключающих значения: да/нет, 1/0, включено/выключено, и т. п. В электронике 1 биту соответствует 1 двоичный триггер.


http://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82

и троичные машины по моему звучит странно.

Это сообщение отредактировал(а) azesmcar - 26.3.2009, 10:30
PM   Вверх
Anikmar
Дата 26.3.2009, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(GoldFinch @  26.3.2009,  10:18 Найти цитируемый пост)
и не "на 1 бит" а "на 1 разряд" =\ 


Главное, чтобы поняли правильно. На самом деле сплошь и рядом кто как называет.

Например тут - побитовый сдвиг назвали
Тут - тоже
Здесь применили смешанное название
Здесь опять побитовый сдвиг

Многие то так то так говорят, а как говорит стандарт - в прикрепленном файле (не дает акробат копировать)

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  clip0002.jpg 132,78 Kb
PM MAIL ICQ   Вверх
GoldFinch
Дата 26.3.2009, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



mes, ну логичнее всего что на троичной платформе операция поразрядного сдвига будет сдвигать на троичные разряды, а не умножать\делить на 2

Цитата(azesmcar @  26.3.2009,  10:26 Найти цитируемый пост)
а где я говорил что эта операция называется деление?

Цитата(azesmcar @  26.3.2009,  10:02 Найти цитируемый пост)
а смещение вправо - делит на 2


Цитата(Anikmar @  26.3.2009,  10:50 Найти цитируемый пост)
Например тут - побитовый сдвиг назвали
Тут - тоже
Здесь применили смешанное название
Здесь опять побитовый сдвиг

прям скажем не очень-то авторитетные источники

Цитата(azesmcar @  26.3.2009,  10:26 Найти цитируемый пост)
В электронике 1 биту соответствует 1 двоичный триггер.

а вот это лол)
PM MAIL ICQ   Вверх
azesmcar
Дата 26.3.2009, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

а смещение вправо - делит на 2


тут говорится что операция смещение вправо называется делением или говорится что смещение вправо делит на два?
думайте...
PM   Вверх
Albor
Дата 26.3.2009, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 2
Всего: 9



Цитата(GoldFinch @  26.3.2009,  09:18 Найти цитируемый пост)
и не "на 1 бит" а "на 1 разряд" =\ 

GoldFish, для общего развития, в чём разница при двоичном представлении числа (ведь именно в таком виде число хранится в памяти)? Честно сказать, я не помню различий между этими терминами, правда курс ЦЭВМ изучался мною довольно давно, может с тех пор что-то изменилось.

PM MAIL ICQ   Вверх
azesmcar
Дата 26.3.2009, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

а вот это лол) 


а что тут именно вам показалось смешным?

Добавлено @ 11:31
Цитата

прям скажем не очень-то авторитетные источники


приведите авторитетные. А стандарт С++ для вас недостаточно авторитетен?

Это сообщение отредактировал(а) azesmcar - 26.3.2009, 11:38
PM   Вверх
GoldFinch
Дата 26.3.2009, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



в советской\российской терминологии (и на пост-советском пространстве наверное тоже)  бит и двоичный разряд это разные понятия
двоичный разряд, десятичный разряд, разряд в позиционной системе счисления с целым основанием n - это величина которая может принимать n различных значений, и имеет некоторый вес зависящий от позиции разряда в числе
бит - это единица измерения количества информации
иногда битом называют двоичный разряд (по аналогии с зарубежным Binary digIT), и наверное в ряде случаев это допустимо, но правильнее называть двоичный разряд двоичным разрядом

пример различия этих терминов - 
"в переменой типа bool 32 (двоичных) разряда"
"в переменой типа bool 1 бит (информации)"

Добавлено через 2 минуты и 16 секунд
Цитата(azesmcar @  26.3.2009,  11:30 Найти цитируемый пост)
стандарт С++ для вас недостаточно авторитетен?

мы же пишем "бит" а не "bit", русского перевода стандарта С++ вроде бы нет
PM MAIL ICQ   Вверх
mes
Дата 26.3.2009, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(GoldFinch @  26.3.2009,  10:26 Найти цитируемый пост)
mes, ну логичнее всего что на троичной платформе операция поразрядного сдвига будет сдвигать на троичные разряды, а не умножать\делить на 2

неа.. не логично, потому что операция - двоичный сдвиг ( сдвиг двоичного разряда )

Цитата(GoldFinch @  26.3.2009,  09:18 Найти цитируемый пост)
и не "на 1 бит" а "на 1 разряд" =\ 

первое правильнее, именно на один бит, а не на некий абстрактный разряд.




Это сообщение отредактировал(а) mes - 26.3.2009, 13:01


--------------------
PM MAIL WWW   Вверх
GoldFinch
Дата 26.3.2009, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Цитата(azesmcar @  26.3.2009,  11:30 Найти цитируемый пост)
а что тут именно вам показалось смешным?

что автор не знает ни что такое "двоичный" триггер, ни что такое 1 бит или 1 двоичный разряд


Это сообщение отредактировал(а) GoldFinch - 26.3.2009, 13:15
PM MAIL ICQ   Вверх
azesmcar
Дата 26.3.2009, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

что автор не знает ни что такое "двоичный" триггер, ни что такое 1 бит или 1 двоичный разряд


что-то я не припомню чтобы автор описывал что такое двоичный триггер. Это описано вот тут

и описано довольно таки на уровне..если у вас есть замечания - приводите аргументы, не бросайтесь словами - "автор не знает что такое триггер". Я во всяком случае считаю что знаю и согласен с тем что описывает вышеупомянутая ссылка. 

Цитата

мы же пишем "бит" а не "bit", русского перевода стандарта С++ вроде бы нет 


вы утверждаете что бит и bit - разные слова и имеют разные значения?
PM   Вверх
Albor
Дата 26.3.2009, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 2
Всего: 9



Вобщем то, не стоит спорить, так как на эти термины есть разные взгляды http://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82
PM MAIL ICQ   Вверх
azesmcar
Дата 26.3.2009, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

Вобщем то, не стоит спорить, так как на эти термины есть разные взгляды http://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82 


как на них не смотри..операция << называется операцией двоичного сдвига. т.е. вести себя она должна по любому так же как ведет на любой другой платформе..я уж не говорю о том что троичные компьютеры - это давняя разработка - причем ее давно оставили, хотя и предполагают к ней вернутся "когда нибудь в будущем".
PM   Вверх
vinter
Дата 26.3.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



в последнее время эта ветка просто заполонена словоедами и оптимизаторами. Господа, может быть не будем отвлекатся, а будем отвечать на посталенные вопросы, без показывания всем, вашей блестящей эрудиции


--------------------
Мой блог
PM MAIL WWW   Вверх
Anikmar
Дата 26.3.2009, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(Albor @  26.3.2009,  12:11 Найти цитируемый пост)
Вобщем то, не стоит спорить, так как на эти термины есть разные взгляды http://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82 

Собственно именно это я хотел сказать.

Цитата(vinter @  26.3.2009,  12:29 Найти цитируемый пост)
в последнее время эта ветка просто заполонена словоедами и оптимизаторами. Господа, может быть не будем отвлекатся, а будем отвечать на посталенные вопросы, без показывания всем, вашей блестящей эрудиции 

 smile 

Главное, что ТС понял о чем речь. 
PM MAIL ICQ   Вверх
azesmcar
Дата 26.3.2009, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

я представляю себе сдвиг n-ичного разряда, но чтото плохо представляю себе двоичный сдвиг n-ичного разряда, да и вообще понятие "двоичный сдвиг" мне совсем непонятно


а я плохо представляю себе работу синхрофазатрона, но все же он работает smile
PM   Вверх
mes
Дата 26.3.2009, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(GoldFinch @  26.3.2009,  10:50 Найти цитируемый пост)
я представляю себе сдвиг n-ичного разряда, но чтото плох

там ошибку внес при  редактировании и сразу не заметил так как отвлекли..  исправил

Цитата(GoldFinch @  26.3.2009,  10:50 Найти цитируемый пост)
вообще понятие "двоичный сдвиг" мне совсем непонятно

a как относитесь к двоичному И. Та же самая логика названия.

Это сообщение отредактировал(а) mes - 26.3.2009, 13:14


--------------------
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1402 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.