Форум программистов, компьютерный форум CyberForum.ru

Побитовые сдвиги - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Лежит ли треугольник внутри окружности радиуса R http://www.cyberforum.ru/cpp-beginners/thread921717.html
Спасите пожалуйста... очень нужна эта прога... знаю, что самое элементарное, но все же... само задание: Заданы координаты вершин треугольника (x1,y1), (x2,y2), (x3,y3). Определить, лежит ли треугольник внутри окружности радиуса R с центром в начале координат.
C++ приложение для создания файлов C++ (я начинающий, не судите строго) #include <iostream> #include <fstream> #include <windows.h> using namespace std; int main() { SetConsoleOutputCP(1251); char nach={"#include <iostream>\n#include <windows.h>\nusing namespace std;\nint main()\n{\n SetConsoleOutputCP(1251);\n}"}; char type={"int char double bool "}; char func_name; http://www.cyberforum.ru/cpp-beginners/thread921712.html
Можно ли использовать такую конструкцию? C++
Здраствуйте! Нужно ввести несколько работником тоесть их ФИО и зарплату. Можно ли использовать для ввода ФИО работников двумерный массив string и работать с ним? Потом еще надо будет отсортировать работников по алфавиту. #include <iostream> #include <string> using namespace std; class A { private:
Как в C++ присвоить массив? C++
у меня есть следующий код: ... bool next_world,, world; ... world = next_world; Однако компилятор (gcc) ругается на подобное присвоение:
C++ numeric_limits и int8_t http://www.cyberforum.ru/cpp-beginners/thread921662.html
Eсли скомпилировать и запустить auto max = numeric_limits<int8_t>::max(); cout << max << endl << sizeof(max) << endl; std::bitset<8> x(max); std::cout << x; То получаю вывод: _кракозябра_
C++ Существует ли элемент в "сложном" векторе Здравствуйте, недавно столкнулся с такой проблемой Есть такая структура и последующий вектор: struct cell { char symbol; int x; int y; }; подробнее

Показать сообщение отдельно
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
11.07.2013, 20:23     Побитовые сдвиги
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//types and constants used in the functions below
 
typedef unsigned __int64 uint64;  //assume this gives 64-bits
const uint64 m1  = 0x5555555555555555; //binary: 0101...
const uint64 m2  = 0x3333333333333333; //binary: 00110011..
const uint64 m4  = 0x0f0f0f0f0f0f0f0f; //binary:  4 zeros,  4 ones ...
const uint64 m8  = 0x00ff00ff00ff00ff; //binary:  8 zeros,  8 ones ...
const uint64 m16 = 0x0000ffff0000ffff; //binary: 16 zeros, 16 ones ...
const uint64 m32 = 0x00000000ffffffff; //binary: 32 zeros, 32 ones
const uint64 hff = 0xffffffffffffffff; //binary: all ones
const uint64 h01 = 0x0101010101010101; //the sum of 256 to the power of 0,1,2,3...
 
//This is a naive implementation, shown for comparison,
//and to help in understanding the better functions.
//It uses 24 arithmetic operations (shift, add, and).
int popcount_1(uint64 x) {
    x = (x & m1 ) + ((x >>  1) & m1 ); //put count of each  2 bits into those  2 bits 
    x = (x & m2 ) + ((x >>  2) & m2 ); //put count of each  4 bits into those  4 bits 
    x = (x & m4 ) + ((x >>  4) & m4 ); //put count of each  8 bits into those  8 bits 
    x = (x & m8 ) + ((x >>  8) & m8 ); //put count of each 16 bits into those 16 bits 
    x = (x & m16) + ((x >> 16) & m16); //put count of each 32 bits into those 32 bits 
    x = (x & m32) + ((x >> 32) & m32); //put count of each 64 bits into those 64 bits 
    return x;
}
 
//This uses fewer arithmetic operations than any other known  
//implementation on machines with slow multiplication.
//It uses 17 arithmetic operations.
int popcount_2(uint64 x) {
    x -= (x >> 1) & m1;             //put count of each 2 bits into those 2 bits
    x = (x & m2) + ((x >> 2) & m2); //put count of each 4 bits into those 4 bits 
    x = (x + (x >> 4)) & m4;        //put count of each 8 bits into those 8 bits 
    x += x >>  8;  //put count of each 16 bits into their lowest 8 bits
    x += x >> 16;  //put count of each 32 bits into their lowest 8 bits
    x += x >> 32;  //put count of each 64 bits into their lowest 8 bits
    return x & 0x7f;
}
 
//This uses fewer arithmetic operations than any other known  
//implementation on machines with fast multiplication.
//It uses 12 arithmetic operations, one of which is a multiply.
int popcount_3(uint64 x) {
    x -= (x >> 1) & m1;             //put count of each 2 bits into those 2 bits
    x = (x & m2) + ((x >> 2) & m2); //put count of each 4 bits into those 4 bits 
    x = (x + (x >> 4)) & m4;        //put count of each 8 bits into those 8 bits 
    return (x * h01)>>56;  //returns left 8 bits of x + (x<<8) + (x<<16) + (x<<24) + ... 
}
 
//This is better when most bits in x are 0
//It uses 3 arithmetic operations and one comparison/branch per "1" bit in x.
int popcount_4(uint64 x) {
    int count;
    for (count=0; x; count++)
        x &= x-1;
    return count;
}
не проверял, взял здесь.
 
Текущее время: 05:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru