[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. Raine

    Raine New Member

    Joined:
    14 Feb 2010
    Messages:
    39
    Likes Received:
    0
    Reputations:
    0
    В тетрадки с лекциями стоит задача: проверить установлен ли первый бит. Дальше идёт ответ:
    Code:
    "int A;
    if (A & 0x1) {...]
    
    Почему это должно работать? Там же выполняется операция
    А
    и
    1
    Должно получится новое число. Как работает это? Почему этим условие мы можем сказать что установлен первый бит?
     
    #6421 Raine, 23 May 2011
    Last edited: 23 May 2011
  2. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Все очень просто.
    Возьмем к примеру числа 119 и 58. Выполним для каждого из них and 0x1 и посмотрим, равняется ли результат 1. Если равняется - первый бит единица, иначе ноль.
     
    #6422 Chrome~, 23 May 2011
    Last edited: 23 May 2011
    1 person likes this.
  3. #andrew#

    #andrew# Elder - Старейшина

    Joined:
    24 Aug 2010
    Messages:
    45
    Likes Received:
    7
    Reputations:
    11
    Сложно ли написать Сапера на сишнике?на си шарпе легче,потому что там работать с windows application легче...
     
  4. Raine

    Raine New Member

    Joined:
    14 Feb 2010
    Messages:
    39
    Likes Received:
    0
    Reputations:
    0
    есть ли у кого исходник реализации метода гаусса?
     
  5. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    посмотри в темах пользователя Ky3bMu4. что то такое он выкладывал, но не помню, Гуасс там был, или Крамер. помню только, что код не ахти был, но принцип, думаю, уловишь.

    --

    UPD:
    вот, нашел,

    http://forum.antichat.ru/showthread.php?t=52608

    --

    вопрос не корректен. кому то сложно, кому то нет. другой вопрос - объем работы. на Си это весьма геморно и вообще не нужно.
     
    #6425 Ins3t, 25 May 2011
    Last edited: 25 May 2011
  6. Raine

    Raine New Member

    Joined:
    14 Feb 2010
    Messages:
    39
    Likes Received:
    0
    Reputations:
    0
    дано число, как перевернуть его побитово?
     
  7. #andrew#

    #andrew# Elder - Старейшина

    Joined:
    24 Aug 2010
    Messages:
    45
    Likes Received:
    7
    Reputations:
    11
    Code:
    #include <iostream>
    using namespace std;
    int per(int n, int i)
    {
      for(int j=i;j>1;j--)
            {
                    n*=10;
            }
            return n;
    }
     
    int per(int n)
    {
      int a;
            int b = 0;
            int i=0;
            int n2=n;
            while(n2>0)
            {
                    n2/=10;
                    i++;
            }
            for(int j=i;j>0;j--)
            {
                    a = n%10;
                    n/=10;
                    b += per(a,i);
                    i--;
            }
            return b;
    }
     
    int main()
    {
            int q;
    		cout << "Enter the number:\n";
    		cin >> q;
    		cout << "Reverse number is:\n" << per(q) << "\n";
            cin >> q;
    }
    
    Если я правильно понял,то просто распечатать перевернутое число...
     
  8. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    А теперь - настоящее переворачивание "по битам":
    PHP:

    #include <iostream>
    int main()
    {
        
    unsigned int nreversed 0;
        
    std::cout << "Number: ";
        
    std::cin >> n;
        for(
    unsigned int i 0sizeof(unsigned int) * 8i++)
            
    reversed |= ((& (<< (sizeof(unsigned int) * 1))) ? 0) << i;
        
    //пример:
        //дано: 6473, в двоичной системе это 00000000000000000001100101001001
        //переворачиваем биты задом наперед: 10010010100110000000000000000000
        //обратно в десятичную: 2459435008
        
    std::cout << "Bit-reversed: " << reversed << std::endl;
    }
     
  9. Raine

    Raine New Member

    Joined:
    14 Feb 2010
    Messages:
    39
    Likes Received:
    0
    Reputations:
    0
    GRRRL Power а ты можешь объяснить свой код? В цикл вообще не врубаюсь. И в условие цикла тоже. Зачем умножали на 8?
     
  10. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Этот код хотя бы именно то, что ты хотел? Я впустую расписывать не хочу :)
     
  11. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    затем, чтобы получить число бит, занимаемое в памяти объектом unsigned int. но судя по вопросу - с побитовыми операциями вы еще не работали, а судя по вопросу перед последним вопросом - вы либо студент прогулявший лекцию, либо имели в виду что то другое.
     
  12. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    Г.Уоррен мл. - Алгоритмические трюки для программистов
    там очень много по работе с битами
    1 шаг) меняет местами соседние биты
    2) пары бит 3) тетрады 4) байты 5) пары байт
    Code:
    UINT32 brev32(UINT32 x)
    {
    	x = (x & 0x55555555) << 1 | (x & 0xAAAAAAAA) >> 1;
    	x = (x & 0x33333333) << 2 | (x & 0xCCCCCCCC) >> 2;
    	x = (x & 0x0F0F0F0F) << 4 | (x & 0xF0F0F0F0) >> 4;
    	x = (x & 0x00FF00FF) << 8 | (x & 0xFF00FF00) >> 8;
    	x = (x & 0x0000FFFF) << 16 | (x & 0xFFFF0000) >> 16;
    	return x;
    }
    
     
    1 person likes this.
  13. Raine

    Raine New Member

    Joined:
    14 Feb 2010
    Messages:
    39
    Likes Received:
    0
    Reputations:
    0
    GRRRL Power да то что надо
     
  14. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    PHP:
     #include <iostream>
    int main()
    {
        
    unsigned int nreversed 0;
        
    std::cout << "Number: ";
        
    std::cin >> n;

        
    //изначально все биты reversed установлены в 0
        //цикл из числа итераций, равного размеру unsigned int 
        //в байтах, умноженного на 8 (8 - число битов в байте)
        //то есть цикл пробегается по всем битам введенного числа n
        
    for(unsigned int i 0sizeof(unsigned int) * 8i++)

        
    //в переменной reversed бит i устанавливается, если в переменной n бит (32 - i - 1) установлен.
        //В противном случае ничего не происходит.
        //Сначала проверяется, установлен ли (32 - i - 1) бит в переменной n.
        //в 32-разрядных exe sizeof(unsigned int) * 8 = 32, если что
            
    reversed |= ((& (<< (sizeof(unsigned int) * 1))) ? 0) << i;
        
    //а дальше просто смотри, что какая битовая операция делает, если все еще непонятно.

        //пример:
        //дано: 6473, в двоичной системе это 00000000000000000001100101001001
        //переворачиваем биты задом наперед: 10010010100110000000000000000000
        //обратно в десятичную: 2459435008
        
    std::cout << "Bit-reversed: " << reversed << std::endl;
    }  
    greki_hoy тебе привел более сложное, но и гораздо более оптимальное решение.
     
  15. return

    return New Member

    Joined:
    23 Oct 2010
    Messages:
    125
    Likes Received:
    3
    Reputations:
    1
    Есть ли в билдере шестом нормальная задержка?
    Code:
    Sleep(2000);
    Application->ProcessMessages();
    
    Такое использовать не удобно потому что форма в это время практически не работоспособна.
     
  16. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Выноси действия, которые включают в себя задержку, в отдельный поток.
     
  17. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    QT
    Пытаюсь написать программу на qt с сигналами и слотами.
    Что в ней неверно?
    Code:
    #include <QtGui/QApplication>
    #include <QLabel>
    
    
    class news: public QObject {
        Q_OBJECT
    public:
        void sendSig()
        {
            emit sendString("info");
        }
    
    signals:
        void sendString(QString);
    };
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        news g();
        QLabel lbl("hello");
        lbl.show();
        QObject::connect(&g, SIGNAL(sendString()), &lbl, SLOT(setText(QString)));
    
        return a.exec();
    }
    Выходит ошибка:
    Code:
    нет подходящей функции для вызова ‘QObject::connect(news(*)(), const char*, QLabel*, const char*)
     
  18. Lee_fx

    Lee_fx Elder - Старейшина

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    news g(); компилятор понимает как прототип функции. Поменяй на news g;

    А вообще этот connect не сработает в данном примере, зачем он?)
     
  19. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Потом создам для него действие.

    Когда исправляю появляется ошибка
    Code:
    Undefined reference to `vtable for news`
     
  20. Lee_fx

    Lee_fx Elder - Старейшина

    Joined:
    27 Sep 2008
    Messages:
    90
    Likes Received:
    14
    Reputations:
    0
    Code:
    class news: public QObject {
        Q_OBJECT
    public:
        void sendSig()
        {
            emit sendString("info");
        }
    
    signals:
        void sendString(QString);
    };
    Попробуй вынести этот класс в отдельный .h файл
     
Thread Status:
Not open for further replies.