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

Быстрый подсчет количества бит - C++

Восстановить пароль Регистрация
Другие темы раздела
Visual C++ Работа с реестром через Winreg.h http://www.cyberforum.ru/cpp-beginners/thread1020536.html
Создаю в реестре переменную через документ *.reg Далее в Студии пишу следующий код: #include <stdio.h> #include <iostream> #include <Windows.h> #include <WinUser.h> using namespace std;
Visual C++ ошибка при запуске после компиляции 'ZoneServerSD.exe': Loaded 'C:\Users\ENICH\Desktop\zone\rf_bin\ZoneServerSD.exe', Symbols loaded. 'ZoneServerSD.exe': Loaded 'C:\Windows\System32\ntdll.dll', No symbols loaded. 'ZoneServerSD.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', No symbols loaded. 'ZoneServerSD.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', No symbols loaded. 'ZoneServerSD.exe': Loaded... http://www.cyberforum.ru/cpp-beginners/thread1020084.html
Visual C++ unresolved external symbol
При компилировании выдает ошибку не могу найти в чем причина ZoneServer error LNK2019: unresolved external symbol "public: __thiscall TxtDialog::TxtDialog(class CWnd *)" (??0TxtDialog@@QAE@PAVCWnd@@@Z) referenced in function "protected: __thiscall CGameServerDoc::CGameServerDoc(void)" (??0CGameServerDoc@@IAE@XZ) ZoneServer error LNK2019: unresolved external symbol "public: virtual __thiscall...
Как найти слабые места в проекте? Visual C++
Имеется проект очень больших размеров, который был создан много лет назад и за это время постоянно дописывался и расширялся. Есть у проекта возможность пересчитать все показатели за последний год. Работает этот пересчет более суток, при этом используется больше половины кода проекта. 1) Мне требуется оптимизировать код, но хочется начать с самых проблемных мест, которые дадут самый ощутимый...
Visual C++ Перевод из int в string http://www.cyberforum.ru/cpp-beginners/thread1019418.html
Напишите пожалуйста как переменную int x = 1234 первести в String.
C++/CLI WinForms Работа с двумя формами С++ В меня есть Form1, по нажатию на кнопку открывается Form2. В Form1 находится datagridview1, в Form2 есть textbox1. В textbox1 находится какое-то число, например, 123. Это число нужно по нажатию кнопки в Form2 перенести в datagridview1. Как это сделать? Заранее спасибо подробнее

Показать сообщение отдельно
stlex
0 / 0 / 0
Регистрация: 27.11.2013
Сообщений: 8
28.11.2013, 08:35  [ТС]     Быстрый подсчет количества бит
Вот окончательный вариант моего класса. Убрал лишние вложенные вызовы функций, и теперь BitCount() приблизился по скорости к &= , SetBit() и прочим. А быстрее всего работает автогенерированный operator=() - вот что значит оптимизация компилятора! Думаю, тут только на asm можно что-то существенно оптимизировать.
Может, код пригодится кому-то.
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
57
58
59
60
61
62
63
64
65
template<int N>
class BitMap
{   
public:
   BitMap()
   {
      Clear();
   }
   inline void Clear()
   {
      ZeroMemory( myMap, N * sizeof(__int32) );
   }
   inline bool GetBit( int n )
   {
      if( ( 1 << ( n % BITS_COUNT_INT ) ) & myMap[ n / BITS_COUNT_INT ] )
         return true;
      else
         return false;
   }
   inline void SetBit( int n )
   {
      myMap[ n / BITS_COUNT_INT ] |=  1 << ( n % BITS_COUNT_INT );
   }
   inline void ClearBit( int n )
   {
      myMap[ n / BITS_COUNT_INT ] &= ~( 1 << ( n % BITS_COUNT_INT ) );
   }
   int BitCount()
   {
      static unsigned __int8 mas[0x10000];
      static bool init = InitMas( mas );
      int res = 0;
      for( int i = 0; i < 11; ++i )
         res += mas[ (unsigned __int16)(myMap[i] >> 16) ] + mas[ (unsigned __int16)(myMap[i] & 0xFFFF) ];
      return res;
   }
   BitMap<N>& operator&=( const BitMap<N>& other )
   {
      for( int i = 0; i < N; ++i )
         myMap[i] &= other.myMap[i];
      return *this;
   }
   BitMap<N>& operator|=( const BitMap<N>& other )
   {
      for( int i = 0; i < N; ++i )
         myMap[i] |= other.myMap[i];
      return *this;
   }
private:
   static bool InitMas( unsigned __int8 *mas )
   {
      for( int i = 0; i < 0x10000; ++i )
      {
         unsigned __int8 count = 0;
         for( int tmp = i; tmp > 0; tmp = tmp / 2 )
         {
            if( tmp % 2 )
               ++count;
         }
         mas[i] = count;
      }
      return true;
   }
   __int32 myMap[N];
};
 
Текущее время: 04:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru