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

Как лучше сделать. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Выделить в массиве последовательность чисел и сравнить выделенное с константами http://www.cyberforum.ru/cpp-beginners/thread49213.html
Привет всем! Прошу помощи!:) Существует некий массив (его содержимое динамически меняется),например: unsigned char Name1 ; и константы: ...
C++ Ошибка, связанная с массивами Вот такой код для такой задачи: записать в массиве М количество положительных элементов каждого столбца матрицы A(K,L). #include <iostream> #include <stdio.h> #include <conio.h> #include <math.h>... http://www.cyberforum.ru/cpp-beginners/thread49195.html
Работа с файлами. Язык С C++
существует такой код int c; FILE *f=fopen("C:/test.txt", "r"); c=getc(f); char a;
C++ Расшифровать цикл
Здравствуйте! Помогите,если кто может, понять вот этот кусок кода,что он делает,желательно чтоб было понятно. for(j = 0; j < 10; j++) if(sqrs ==i) break; из вот этого исходника:
C++ ++N http://www.cyberforum.ru/cpp-beginners/thread49185.html
в чем отличие ++а от а++?
C++ Использование toupper() Не знаю почему, но код не хочет работать, вроде уже всё прописал что нужно. Программа должна выдать на экран фразу: украина - лучшая страна в мире с большой буквы все символы. Во исходник простой... подробнее

Показать сообщение отдельно
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
03.09.2009, 19:16
Mozart, я хоть и в отпуске, но не поленился померять. мой код и понятней (т.е. менее подвержен ошибкам и изначально, и тем более при сопровождении), и (вы не поверите!) выполняется быстрее.

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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#define BYTES_IN_ROW 100
#define BITS_IN_BYTE 8
 
char* pBitmatrix=new char [60000];
 
bool isBit (int x,int y){
    char mask = 0;
    switch (x%8){
        case 0:
            mask = '\x80';
            break;
        case 1:
            mask = '\x40';
            break;
        case 2:
            mask = '\x20';
            break;
        case 3:
            mask = '\x10';
            break;
        case 4:
            mask = '\x08';
            break;
        case 5:
            mask = '\x04';
            break;
        case 6:
            mask = '\x02';
            break;
        case 7:
            mask = '\x01';
            break;
    }
    return (*(pBitmatrix + BYTES_IN_ROW*y + x/BITS_IN_BYTE) | mask) != '\x00';
}
 
bool getbit(int x,int y){
     int p=((y<<9)+(y<<8)+(y<<5)+x);
     int n=p&7;
     p>>=3;
     return (pBitmatrix[p]&(1<<n))>>n;
}
 
unsigned __int64 inline GetRDTSC() {
   __asm {
      ; Flush the pipeline
      XOR eax, eax
      CPUID
      ; Get RDTSC counter in edx:eax
      RDTSC
   }
}
 
/////////////////////////
//
int main() {
 
    bool b;
    unsigned int i;
 
    unsigned __int64 a1 = GetRDTSC();
 
 
    for (i = 0; i < 10000000; i++){
        b = isBit (2, 20);
    }
 
    unsigned __int64 a2 = GetRDTSC();
 
    for (i = 0; i < 10000000; i++){
        b = getbit (2,20);
    }
    
    unsigned __int64 a3 = GetRDTSC();
    
    unsigned __int64 diffNovi4ok = a2-a1;
    unsigned __int64 diffMozart = a3-a2;
 
    bool isMozartFaster = diffMozart < diffNovi4ok;
Добавлено через 23 минуты
да, нахомутал я совсем не то что думал. правильно так:

C++
1
return (*(pBitmatrix + BYTES_IN_ROW*y + x/BITS_IN_BYTE) & mask) != '\x00';
кстати, ваш код еще и работает неправильно:

C++
1
2
3
4
5
6
7
8
9
10
11
12
    ::memset (pBitmatrix, 0, 60000);
    *(pBitmatrix+102) = '\x02';// что должно установить бит с x,y = {22,1} 
 
       //будет работать правильно после исправления указанной ошибки
    bool b = isBit (22, 1);
    b = isBit (21, 1);
    b = isBit (23, 1);
 
       //будет возвращать во всех случаях false
    b = getbit (22, 1);
    b = getbit (21, 1);
    b = getbit (23, 1);
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru