В тетрадки с лекциями стоит задача: проверить установлен ли первый бит. Дальше идёт ответ: Code: "int A; if (A & 0x1) {...] Почему это должно работать? Там же выполняется операция А и 1 Должно получится новое число. Как работает это? Почему этим условие мы можем сказать что установлен первый бит?
Все очень просто. Возьмем к примеру числа 119 и 58. Выполним для каждого из них and 0x1 и посмотрим, равняется ли результат 1. Если равняется - первый бит единица, иначе ноль.
Сложно ли написать Сапера на сишнике?на си шарпе легче,потому что там работать с windows application легче...
посмотри в темах пользователя Ky3bMu4. что то такое он выкладывал, но не помню, Гуасс там был, или Крамер. помню только, что код не ахти был, но принцип, думаю, уловишь. -- UPD: вот, нашел, http://forum.antichat.ru/showthread.php?t=52608 -- вопрос не корректен. кому то сложно, кому то нет. другой вопрос - объем работы. на Си это весьма геморно и вообще не нужно.
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; } Если я правильно понял,то просто распечатать перевернутое число...
А теперь - настоящее переворачивание "по битам": PHP: #include <iostream> int main() { unsigned int n, reversed = 0; std::cout << "Number: "; std::cin >> n; for(unsigned int i = 0; i < sizeof(unsigned int) * 8; i++) reversed |= ((n & (1 << (sizeof(unsigned int) * 8 - i - 1))) ? 1 : 0) << i; //пример: //дано: 6473, в двоичной системе это 00000000000000000001100101001001 //переворачиваем биты задом наперед: 10010010100110000000000000000000 //обратно в десятичную: 2459435008 std::cout << "Bit-reversed: " << reversed << std::endl; }
GRRRL Power а ты можешь объяснить свой код? В цикл вообще не врубаюсь. И в условие цикла тоже. Зачем умножали на 8?
затем, чтобы получить число бит, занимаемое в памяти объектом unsigned int. но судя по вопросу - с побитовыми операциями вы еще не работали, а судя по вопросу перед последним вопросом - вы либо студент прогулявший лекцию, либо имели в виду что то другое.
Г.Уоррен мл. - Алгоритмические трюки для программистов там очень много по работе с битами 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; }
PHP: #include <iostream> int main() { unsigned int n, reversed = 0; std::cout << "Number: "; std::cin >> n; //изначально все биты reversed установлены в 0 //цикл из числа итераций, равного размеру unsigned int //в байтах, умноженного на 8 (8 - число битов в байте) //то есть цикл пробегается по всем битам введенного числа n for(unsigned int i = 0; i < sizeof(unsigned int) * 8; i++) //в переменной reversed бит i устанавливается, если в переменной n бит (32 - i - 1) установлен. //В противном случае ничего не происходит. //Сначала проверяется, установлен ли (32 - i - 1) бит в переменной n. //в 32-разрядных exe sizeof(unsigned int) * 8 = 32, если что reversed |= ((n & (1 << (sizeof(unsigned int) * 8 - i - 1))) ? 1 : 0) << i; //а дальше просто смотри, что какая битовая операция делает, если все еще непонятно. //пример: //дано: 6473, в двоичной системе это 00000000000000000001100101001001 //переворачиваем биты задом наперед: 10010010100110000000000000000000 //обратно в десятичную: 2459435008 std::cout << "Bit-reversed: " << reversed << std::endl; } greki_hoy тебе привел более сложное, но и гораздо более оптимальное решение.
Есть ли в билдере шестом нормальная задержка? Code: Sleep(2000); Application->ProcessMessages(); Такое использовать не удобно потому что форма в это время практически не работоспособна.
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*)
news g(); компилятор понимает как прототип функции. Поменяй на news g; А вообще этот connect не сработает в данном примере, зачем он?)
Потом создам для него действие. Когда исправляю появляется ошибка Code: Undefined reference to `vtable for news`
Code: class news: public QObject { Q_OBJECT public: void sendSig() { emit sendString("info"); } signals: void sendString(QString); }; Попробуй вынести этот класс в отдельный .h файл