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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Zla9_Kolu4ka
2 / 2 / 0
Регистрация: 28.08.2013
Сообщений: 407
#1

Как работает функция "test" в приведенном коде - C++

14.01.2014, 16:14. Просмотров 863. Ответов 27
Метки нет (Все метки)

Объясните как работает функция test

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
#include <conio.h>
#include <iostream.h>
#include <limits.h>
 
int     test(long int a)
     {return ((a>>15)+1)&~1;}
 
int     primC(int a, const int b, const int c, const int d)
{ double z = (2.0*a+1.0*b*c)/(d-a);  //!!!!!!!!!! ВНИМАНИЕ !!!!!!!!!!!!!!!!!
  if (z > SHRT_MIN && z < SHRT_MAX) return z;
   else
    { cout << "\n!!!!!!!!!!! Limits of int value !!!!!!!!!!!\n  x = "
           << z << endl;
      return SHRT_MIN; //-32768
     }
 }
 
int X,a;
 
void main(void)
{   char ch;
    const b=-333;
    const c= 1000;
    const d=-10;
    long int a1;
    do {X = 0;
        cout << "\n    x=(2*a+b*c)/(d-a);  int x,a,b=-333,c=1000,d=-10;" << endl;
        do{ cout<<"\n    Enter a [-32768..32767], a!= " << d << " ====> ";
            cin>> a1;
           }while (test(a1) || d - a1 == 0 || test (d-a1));
        a = a1;
        X = primC(a, b, c, d);
        if (X!=SHRT_MIN)
         { cout << " Result (C++) x = " << X << endl;
          }
        cout << "\n\nExit? - (y/n)\n";
        ch = getch();
       } while (!(ch=='y' || ch =='Y'));
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2014, 16:14     Как работает функция "test" в приведенном коде
Посмотрите здесь:

Как работает генерация случайных чисел в приведенном коде - C++
Дорогие Форумчане! Подскажите пожалуйста, как работает нижеследующий код для генерации случайных чисел: random=rand()%(b+1-a)+a; ...

Не работает функция подсчета количеств букв "а" в словах - C++
Подскажите пожалуйста почему не работает функция подсчета количеств букв &quot;а&quot; в словах. Ничего не выводит. #include &lt;iostream&gt; #include...

Не работает функция itoa(): "was not declared in this scope" - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; в ошибке написано что itoa() не объявлена (itoa()...

Не работает функция system("dir") - C++
Уже не знаю сколько с этим мучаюсь, но оставлять просто так не охотно. Ни в какую не работает функция System. Пришлось заменять, но все же...

Не правильно работает if в приведенном коде - C++
Есть функция которая считает начало слова в строке(a - массив строк, b - массив разделителей).Столкнулся с проблемой что не смотря на то...

Не работает сортировка в приведенном коде - C++
что тут не так? #include &lt;iostream&gt; using namespace std; void en(int* a, int size); void ex(int* a, int size); void...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Модератор
Эксперт CЭксперт С++
6988 / 4159 / 592
Регистрация: 29.11.2010
Сообщений: 11,037
15.01.2014, 02:08     Как работает функция "test" в приведенном коде #21
Цитата Сообщение от Zla9_Kolu4ka Посмотреть сообщение
Этот код под 16 бит, а не 32
По стандарту, ничто не гарантирует, что int или short int и т.д. (не считая char и unsigned char) занимает какое-то определенное кол-во памяти.
ValeryS
Модератор
6539 / 5005 / 461
Регистрация: 14.02.2011
Сообщений: 16,648
15.01.2014, 02:31     Как работает функция "test" в приведенном коде #22
Цитата Сообщение от Zla9_Kolu4ka Посмотреть сообщение
Этот код под 16 бит, а не 32
а где это было указано?
теперь смотрим
максимальное положительное число для 2 байт
32767 0х7FFF
>>15=0
(0+1)&0xFFFE=0
минимальное отрицательное
-32768 0x8000
>>15=0xFFFF
0xFFFF+1=0 &0xFFFE=0
в результате функция всегда возвращает 0

единственно что я могу предположить что функция возвращает не 0 если число отрицательное
но тогда в прототипе должно быть
C++
1
int     test(unsigned long int a)
тогда
0x8000
>>15=0x0001
0x0001+1=2 &0xFFFE=2
Zla9_Kolu4ka
2 / 2 / 0
Регистрация: 28.08.2013
Сообщений: 407
15.01.2014, 02:41  [ТС]     Как работает функция "test" в приведенном коде #23
а где это было указано?
Тут по коду понятно
C++
1
2
int     primC(int a, const int b, const int c, const int d)
      return SHRT_MIN; //-32768
int 16-ти битное
ValeryS
15.01.2014, 02:44
  #24

Не по теме:

Цитата Сообщение от Zla9_Kolu4ka Посмотреть сообщение
Тут по коду понятно
да по этому коду, много что понятно

Zla9_Kolu4ka
2 / 2 / 0
Регистрация: 28.08.2013
Сообщений: 407
15.01.2014, 19:30  [ТС]     Как работает функция "test" в приведенном коде #25
минимальное отрицательное
-32768 0x8000
>>15=0xFFFF
Не пойму, почему тут 0xFFFF, а не 0x0001
ValeryS
Модератор
6539 / 5005 / 461
Регистрация: 14.02.2011
Сообщений: 16,648
15.01.2014, 19:54     Как работает функция "test" в приведенном коде #26
Цитата Сообщение от Zla9_Kolu4ka Посмотреть сообщение
Не пойму, почему тут 0xFFFF, а не 0x0001
потому что сдвиг вправо отличается для знаковых и беззнаковых типов
при сдвиге беззнаковых в левый разряд записывается 0
а при сдвиге знаковых в левый разряд записывается копия знакового бита(левого разряда)
так при сдвиге безнаковых
0x8000(1000 0000 0000 0000)>>1=0x4000(0100 0000 0000 0000)
а так при сдвиге знаковых
0x8000(1000 0000 0000 0000)>>1=0xC000(1100 0000 0000 0000)
чтобы было понятней
-32768(0x8000)/2=-16384(0xC000)
32768(0x8000)/2=16384(0x4000)
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.01.2014, 19:58     Как работает функция "test" в приведенном коде #27
Цитата Сообщение от MrGluck Посмотреть сообщение
Элементарно:
здесь её нет
читай:
Цитата Сообщение от Zla9_Kolu4ka Посмотреть сообщение
int * * test(long int a)
* * *{return ((a>>15)+1)&~1;}
.
Цитата Сообщение от Zla9_Kolu4ka Посмотреть сообщение
Объясните как работает функция test
А прочитать ни как? Всего то сдвиг параметра на 15 бит, потом арифметическое сложение результата с единицей, к сумме побитно применяется И c числом, все биты которого противоположны битам единицы в разрядности long int.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2014, 21:42     Как работает функция "test" в приведенном коде
Еще ссылки по теме:

Каким образом работает swap в приведенном коде? - C++
Каким образом работает swap в коде ниже? #include&lt;list&gt; #include&lt;memory&gt; #include&lt;utility&gt; struct test { ...

Выползает такая ошибка "test.exe вызвал срабатывание точки останова." - C++
Одну итерацию цикла программа проходит, затем на середине второй выскакивает такая вот фигня: &quot;test.exe вызвал срабатывание точки...

Как перегрузить ">>" в приложенном коде - C++
как собстно перегрузить &gt;&gt; в данном примере? #include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; class Person { ...

Как исправить ошибку "Функция в качестве левого операнда"? - C++
Пытаюсь запустить программу, но возникает ошибка: Функция в качестве левого операнда. Ссылается на строки с установлением цены. #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
MrGluck
Модератор
Эксперт CЭксперт С++
6988 / 4159 / 592
Регистрация: 29.11.2010
Сообщений: 11,037
15.01.2014, 21:42     Как работает функция "test" в приведенном коде #28
Цитата Сообщение от taras atavin Посмотреть сообщение
читай:
читай
Цитата Сообщение от MrGluck Посмотреть сообщение
wolf1396, ТС изначально скинула файл на форум, где функция test называлась по другому. Когда я сделал замечание - она исправила код (можно в течении 5 минут после публикации) и зачем то (!!!) еще и написала мне что мол я просто так придираюсь. А я, как писал уже выше, даже через поиск Ctrl + F проверил наличие сией функции.
Цитата Сообщение от Zla9_Kolu4ka Посмотреть сообщение
просто я когда написала код, смотрю, имя функции не test, а temp и подправила и даже не предала этому значения вообще, потому что temp функция была где то секунд 30
Yandex
Объявления
15.01.2014, 21:42     Как работает функция "test" в приведенном коде
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru