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

Операции сдвига, перегруженые функции. Объясните суть - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
zaxi
2 / 2 / 0
Регистрация: 18.01.2010
Сообщений: 23
23.06.2011, 07:13     Операции сдвига, перегруженые функции. Объясните суть #1
Люди, помогите плиз. Дали на летнюю практику задания, которые в семестре не делали впринципе(учили простой Си).
Первое задание такое: дано целоцичсленное a=1 Используя операции сдвига и дизъюнкции получить 8888 в шестнадцатеричной системе. То есть, как я понял, надо получить из 00000001 00001000 в каждом бите из четырех. Допустим в крайнем бите можно сместить еденичку на 3 разряда операцией << (как нашел в Википедии), но как потом "копировать" это в каждый бит? Если можно, набросайте в коде.

Втрое: написать две перегруженные функции. Вот одна из них: y=1/(x^2+1.2). Как я прочитал и понял, перегрузка нужна в том случае, если, например, разное число операндов и т. п. А что можно перегружать в этой функции-формуле?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2011, 07:13     Операции сдвига, перегруженые функции. Объясните суть
Посмотрите здесь:

Объясните, в чем суть директив #ifndef/#define/#endif C++
C++ операции сдвига
C++ Операции сдвига
Операции сдвига в языке C. C++
Побитовые операции сдвига C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
23.06.2011, 07:31     Операции сдвига, перегруженые функции. Объясните суть #2
Дизьюнкция, это логическое ИЛИ. Оператор | (вертикальная палочка)

Выглядеть типа такого будет. Специально не стал лепить в кучу, чтобы тебя не смущать
C++
1
2
3
4
5
6
7
int result = 0;
int v = 1;
for( int i = 0; i < 4; ++i )
{
     result = result | v;
     v = v << 3;
}

В языке Си нет перегрузки. Злой у вас препод.
Kastaneda
23.06.2011, 08:17
  #3

Не по теме:

Цитата Сообщение от Deviaphan Посмотреть сообщение
В языке Си нет перегрузки. Злой у вас препод.
А у нас препод ссылки без смущения использует (в универе стоят компиляторы С++), хотя преподоваемый язык С.

zaxi
2 / 2 / 0
Регистрация: 18.01.2010
Сообщений: 23
23.06.2011, 08:59  [ТС]     Операции сдвига, перегруженые функции. Объясните суть #4
Цитата Сообщение от Deviaphan Посмотреть сообщение
В языке Си нет перегрузки. Злой у вас препод.
В том и дело, что весь курс изучали Си, а практика на Си++

Добавлено через 20 минут
с задачей кстати вот что получилось

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int result = 0;
int v = 1;
v = v << 3; //получаем восьмерку
result = result | v;
for( int i = 0; i < 4; ++i )
{    v = v << 8;
     result = result | v;//сдвигаем и переносим в каждый бит
     
}
printf("%x", result);
}
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
23.06.2011, 10:03     Операции сдвига, перегруженые функции. Объясните суть #5
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main(void)
{
    unsigned long n = 1;
    int i;
 
    for (i = 0; i < 4; i++)
        n |= n << 4;
    n >>= 1;
    printf("%lx\n", n);
    return 0;
}
Код
[guest@localhost tests]$ ./t
8888
[guest@localhost tests]$
Цитата Сообщение от zaxi
А что можно перегружать в этой функции-формуле?
тип x и y
zaxi
2 / 2 / 0
Регистрация: 18.01.2010
Сообщений: 23
23.06.2011, 11:11  [ТС]     Операции сдвига, перегруженые функции. Объясните суть #6
с восьмерками косяк подправил, примерно так же и вышло

тип x и y
т. е. сделать, чтобы функция могла работать например и с int x и с float x?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.06.2011, 02:15     Операции сдвига, перегруженые функции. Объясните суть #7
Цитата Сообщение от zaxi
т. е. сделать, чтобы функция могла работать например и с int x и с float x?
и возвращала тоже разные типы
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
24.06.2011, 06:12     Операции сдвига, перегруженые функции. Объясните суть #8
Для int смысла делать перегрузку нет. Ответ всегда будет 0.

C++
1
2
3
4
5
6
7
8
9
float Func( float x)
{
    return 1/(x^2+1.2);
}
 
double Func( double x)
{
    return 1/(x^2+1.2);
}
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.06.2011, 09:31     Операции сдвига, перегруженые функции. Объясните суть #9
xor для вещественных не работает
у него там возведение в степень

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
using namespace std;
 
float Func( float x)
{
    return 1 / (x * x + 1.2);
}
 
double Func( double x)
{
    return 1 / (x * x + 1.2);
}
 
int main()
{
    Func(1.0);
    Func(1);
    return 0;
}
Код
[guest@localhost tests]$ .iso++ t.cpp -o t
t.cpp: В функции ‘int main()’:
t.cpp:19:11: ошибка: вызов перегруженной функции ‘Func(int)’ неоднозначен
t.cpp:6:7: замечание: претенденты: float Func(float)
t.cpp:11:8: замечание:              double Func(double)
[guest@localhost tests]$
нужно
C++
1
double Func(int);
Добавлено через 3 минуты
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
#include <iostream>
 
using namespace std;
 
float Func(float x)
{
    cout << "I'm float\n";
    return 1 / (x * x + 1.2);
}
 
double Func(double x)
{
    cout << "I'm double\n";
    return 1 / (x * x + 1.2);
}
 
double Func(int x)
{
    cout << "I'm int\n";
    return 1 / (x * x + 1.2);
}
 
int main()
{
    Func(1.0);
    Func(1.0f);
    Func(1);
    return 0;
}
Код
[guest@localhost tests]$ .iso++ t.cpp -o t
[guest@localhost tests]$ ./t
I'm double
I'm float
I'm int
[guest@localhost tests]$
zaxi
2 / 2 / 0
Регистрация: 18.01.2010
Сообщений: 23
24.06.2011, 19:30  [ТС]     Операции сдвига, перегруженые функции. Объясните суть #10
xor для вещественных не работает
у него там возведение в степень
не суть важно, главно с перегрузкой вроде разобрался, спасибо за помощь
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
24.06.2011, 20:28     Операции сдвига, перегруженые функции. Объясните суть #11
zaxi,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <bitset>
#include <iomanip>
 
int main()
{
   std::bitset <16> bin_number;
   
   bin_number.set(0);
   
   for (size_t i = 0; i < 4; ++i)
      bin_number |= bin_number << 4;
   
   bin_number <<= 3;
   
   std::cout << std::hex << bin_number.to_ulong() << std::endl;
   
   return 0;
}
Svetilka666
0 / 0 / 0
Регистрация: 03.07.2011
Сообщений: 12
03.07.2011, 16:03     Операции сдвига, перегруженые функции. Объясните суть #12
а можно первую задачу на С++ только получить b=111111 в восьмеричной системе.как сделать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2011, 17:04     Операции сдвига, перегруженые функции. Объясните суть
Еще ссылки по теме:

Операции сдвига C++
C++ Объясните на словах суть задания
C++ Упаковка пакета с помощью операции сдвига

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

Или воспользуйтесь поиском по форуму:
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
03.07.2011, 17:04     Операции сдвига, перегруженые функции. Объясните суть #13
Svetilka666,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <bitset>
#include <iomanip>
 
int main()
{
   std::bitset <16> bin_number;
   
   bin_number.set(0);
   
   for (int i = 0; i < 5; ++i)
      bin_number |= bin_number << 3;
   
   std::cout << std::oct << bin_number.to_ulong() << std::endl;
   
   return 0;
}
Yandex
Объявления
03.07.2011, 17:04     Операции сдвига, перегруженые функции. Объясните суть
Ответ Создать тему
Опции темы

Текущее время: 20:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru