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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 45, средняя оценка - 4.73
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
#1

Как убрать знак минус - C++

13.08.2011, 16:29. Просмотров 6687. Ответов 27
Метки нет (Все метки)

У меня int a = -7. Как программно получить a = 7?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2011, 16:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как убрать знак минус (C++):

Создать функцию, возвращающую знак числа – символ ‘+’ (плюс) или ‘–‘ (минус) - C++
Создать функцию, возвращающую знак числа – символ ‘+’ (плюс) или ‘–‘ (минус). Создайте функцию, которая целое число из интервала ...

Как убрать с конца строки знак переноса, после считывания ее из файла? - C++
Всем доброго дня. Говоря подробнее, я считываю информацию из текстового файла. Там находятся фамилии в столбик. После считывания строки, я...

Не могу убрать знак переноса строки - C++
Никак не получается убрать перенос строки. Помогите пожалуйста. Бьюсь уже несколько часов. #include <stdio.h> #include <stdlib.h>...

Заполнить массив единицами и минус единицами и поменять единицы и минус единицы местами - C++
Помогите решить задачу,не могу понять как заполнить массив единицами и минус единицами в случайном порядке без нулей.

Как правильно перегружать унарный минус? - C++
Дайте правильный прототип перегрузки унарного минуса.

Как сделать, чтобы калькулятор реагировал на унарный минус - C++
подскажите, как сделать, чтобы этот калькулятор реагировал на унарный минус? int prior(char c) { int a; if (c=='+' || c=='-')...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
13.08.2011, 23:33 #16
впринципе можно вот так.

C++
1
2
3
4
5
const int a=-7;
    int *b=(int*)&a;
    cout<<*b;
    *b=-(*b);
    cout<<*b;
0
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
14.08.2011, 00:49 #17
int n;
...
n = ~n + 1;
0
ромик0
9 / 9 / 0
Регистрация: 27.07.2011
Сообщений: 90
14.08.2011, 16:16 #18
silentnuke,
Цитата Сообщение от silentnuke Посмотреть сообщение
впринципе можно вот так.
но "а" так и остаётся со знаком минус
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
14.08.2011, 16:33 #19
Цитата Сообщение от ромик0 Посмотреть сообщение
а как изменить быть с
C++
1
const int a = -7
&
C++
1
#define a = -7
кто знает как в этих случаях поменять знак?
использовать в коде например такую запись:
C++
1
int b=-a;
поскольку в случае с difine и очень часто с const память под переменную вообще не будет выделена, а значение подставиться в место использования на этапе компиляции.
0
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
14.08.2011, 19:01 #20
Цитата Сообщение от ромик0 Посмотреть сообщение
silentnuke,

но "а" так и остаётся со знаком минус
она не остается, просто компилятор при компиляции, подставляет сразу вместо "a" значение, если пройдете по дебагу, и посмотрите что находится в a, уведите что там изменился знак.
и зачем тогда делать const, если вы знаете, что нужно будет изменить знак.
0
ромик0
9 / 9 / 0
Регистрация: 27.07.2011
Сообщений: 90
14.08.2011, 19:21 #21
silentnuke,
Цитата Сообщение от silentnuke Посмотреть сообщение
если пройдете по дебагу, и посмотрите что находится в a, уведите что там изменился знак.
там знак не изменился. допишите
C++
1
cout << a;
в конце и увидите сами.(-7)
0
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.08.2011, 19:34 #22
ромик0, не трогайте константы, они вам ничего плохого не сделали если положительное значение вам нужно записать в ту же переменную, типа a = -a;, то не делайте её константой.
0
ромик0
9 / 9 / 0
Регистрация: 27.07.2011
Сообщений: 90
14.08.2011, 19:46 #23
talis , я и не думал трогать константы , просто интересно как можно было бы изменить их.
0
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.08.2011, 19:52 #24
ромик0, #define'ы изменить невозможно, так как они являются константами препроцессора. Когда он проходит исходный файл, и видит употребление символьной константы (#define), он заменяет его на значение этой константы, причём это необязательно должно быть число:

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
#define PI 3.14f
 
void bar()
{
   float a = 44 * PI;
   
   // после прохода препроцессора превратится в
   
   float a = 44 * 3.14f;
}
 
 
//--------------------------
 
#define ARRAY_SIZE 44
#define ARRAY_OUT for( int i = 0; i < ARRAY_SIZE; i++ ) cout << array[i] << ' ';
 
void bar()
{
   int array[ ARRAY_SIZE ];
 
   ARRAY_OUT
   
   // после прохода препроцессора превратится в
 
   int array[ 44 ];
 
   for( int i = 0; i < 44; i++ ) cout << array[i] << ' ';
   
}
0
Сыроежка
Заблокирован
14.08.2011, 20:04 #25
Цитата Сообщение от talis Посмотреть сообщение
ромик0, #define'ы изменить невозможно, так как они являются константами препроцессора. Когда он проходит исходный файл, и видит употребление символьной константы (#define), он заменяет его на значение этой константы, причём это необязательно должно быть число:

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
#define PI 3.14f
 
void bar()
{
   float a = 44 * PI;
   
   // после прохода препроцессора превратится в
   
   float a = 44 * 3.14f;
}
 
 
//--------------------------
 
#define ARRAY_SIZE 44
#define ARRAY_OUT for( int i = 0; i < ARRAY_SIZE; i++ ) cout << array[i] << ' ';
 
void bar()
{
   int array[ ARRAY_SIZE ];
 
   ARRAY_OUT
   
   // после прохода препроцессора превратится в
 
   int array[ 44 ];
 
   for( int i = 0; i < 44; i++ ) cout << array[i] << ' ';
   
}
Почему же нельзя изменить препроцессорную константу?! Задайте #undef, а затем #define уже с новым значением константы.
0
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.08.2011, 20:08 #26
Цитата Сообщение от Сыроежка Посмотреть сообщение
Почему же нельзя изменить препроцессорную константу?! Задайте #undef, а затем #define уже с новым значением константы.
Ну так не во время же рантайма оно меняться будет :-)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
    #define ALPHA 5
 
    int beta = 4;
 
    if( beta == 0 ) // FALSE
    {
        #undef ALPHA
        #define ALPHA 8
    }
 
    cout << ALPHA; // препроцессор игнорирует логику рантайма, хотя и имеет свою
 
    return 0;
}
Добавлено через 39 секунд
И кстати #undef тут необязателен.
1
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
14.08.2011, 20:39 #27
Цитата Сообщение от ромик0 Посмотреть сообщение
silentnuke,

там знак не изменился. допишите
C++
1
cout << a;
в конце и увидите сами.(-7)
я же сразу сказал, что при компиляции вместо "a" поставится значение, поэтому cout не поможет увидеть, но если пройдете в дебаге, и посмотрите значение, увидите что оно изменилось.
0
easybudda
Модератор
Эксперт CЭксперт С++
9632 / 5580 / 948
Регистрация: 25.07.2009
Сообщений: 10,714
14.08.2011, 23:21 #28
Цитата Сообщение от Kastaneda Посмотреть сообщение
x=x-x-x;
А чё? Прикольно. Я бы не додумался
Вот ещё брутальный способ, только с INT_MIN в качестве параметра не задалось
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <limits.h>
 
#define mad_abs(x) (((x) & (1 << (sizeof(x) * CHAR_BIT - 1))) ? (~(x) + 1) : (x))
 
int main(void){
    int x;
    
    while ( printf("x = ") && scanf("%d", &x) == 1 )
        printf("mad_abs(x) = %d\n", mad_abs(x));
    
    return 0;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2011, 23:21
Привет! Вот еще темы с ответами:

Как вызвать в главной программе оператор унарный минус - C++
Paint operator-(const Paint&amp; p) { return Paint(-p.x,-p.y); }

Как вывести на консоль минимально плюсовой элемент одномерного массива от минус 10 до +10 - C++
Почему то выводит всегда мин элемент=0 // #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int _tmain(int argc,...

как задать знак пробела? - C++
Дано натуральное число n и символы s1,....,sn. Группы символов разделённые пробелом будут называться словами. Найти длину самого короткого...

Как узнать знак числа? - C++
как узнать знак числа для float или double. пишу в win32.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.08.2011, 23:21
Ответ Создать тему
Опции темы

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