Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2014, 17:22   #1
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию непонятная функция

Объясните как работает функция test
Код:
#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'));
}
zla9_kolu4ka вне форума Ответить с цитированием
Старый 14.01.2014, 18:50   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

А что вам не понятно? Сдвиг, сумма и побитовое И...
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 15.01.2014, 18:13   #3
vvmcpp
Форумчанин
 
Аватар для vvmcpp
 
Регистрация: 11.12.2010
Сообщений: 116
По умолчанию

если вашу конструкцию
Код:
(z > SHRT_MIN && z < SHRT_MAX)
записать как
Код:
(SHRT_MIN < z  && z < SHRT_MAX )
, то будет наглядно виден интервал в котором находится z
vvmcpp вне форума Ответить с цитированием
Старый 15.01.2014, 22:26   #4
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию

Цитата:
test (d-a1)
это пример не мой, а из учебника, интересно зачем сделали эту проверку, что она делает
zla9_kolu4ka вне форума Ответить с цитированием
Старый 15.01.2014, 23:13   #5
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию

Кстати, программа написана для 16 бит !!!

Последний раз редактировалось zla9_kolu4ka; 15.01.2014 в 23:30.
zla9_kolu4ka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятная ошибка... JekaDefer Общие вопросы Delphi 3 05.07.2012 23:43
Непонятная ошибка optimator C++ Builder 4 23.12.2010 17:20
Непонятная ошибка Lisёноk Помощь студентам 4 19.12.2010 15:08
непонятная функция alhon Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 08.06.2010 17:17
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50