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

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

Войти
Регистрация
Восстановить пароль
 
Russian_Dragon
10 / 11 / 0
Регистрация: 18.02.2012
Сообщений: 140
#1

Глюк false = true == true; - C++

26.02.2012, 20:57. Просмотров 936. Ответов 10
Метки нет (Все метки)

Возник глюк, пишу:
result.isPlus = this->isPlus == numberBigSize.isPlus;

Поля "this->isPlus" и "numberBigSize.isPlus" равны true, но почему-то "result.isPlus" присваивается false.
По какой причине это может быть?
п.с.
Для теста полям "this->isPlus" и "numberBigSize.isPlus" присвоить true не могу, т.к. они лежат глубоко в функциях и объявлены как const.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2012, 20:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Глюк false = true == true; (C++):

False,True - C++
Помогите пожалуйста. Составить программу, печатающую TRUE, если указанное высказывание является истинным, и FALSE в противном случае. ...

true and false - C++
Уважаемые, программисты! Помогите, пожалуйста, с программой. Написать программу, которая печатает True или False в зависимости от...

Задача на true or false - C++
You have the implement a function, with the following signature: ABCheck(str). The argument str is of type string. The function...

вывод true и false - C++
Доброгов сем времени суток. Хотелось бы попросить помощи в решении этого задания, под цифрой 2, справа. треугольник у меня получился...

С++. вывод true/false - C++
помогите пожалуйста, почему не робит прога. должна вывести 1 если символ введеный с клавы гласная буква русского алфавита, иначе 0. ...

Контейнерный класс True False - C++
Ребят глюк какой то функция getNumber, не работает хотя работает но не правильно для логического массива в котором должно быть true false...

10
dimcoder
Полярный
466 / 439 / 68
Регистрация: 11.09.2011
Сообщений: 1,137
26.02.2012, 21:00 #2
Цитата Сообщение от Russian_Dragon Посмотреть сообщение
"this->isPlus" и "numberBigSize.isPlus присвоить true не могу"
Для теста можно просто сделать так:
C++
1
cout << this->isPlus << endl << numberBigSize.isPlus << endl;
И анализируем результат.

http://liveworkspace.org/code/49d625c81614344347da39dc3f238d03
0
NoMasters
Псевдослучайный
1762 / 1105 / 73
Регистрация: 13.09.2011
Сообщений: 3,141
26.02.2012, 21:01 #3
Напиши лучше
C++
1
esult.isPlus = this->isPlus && numberBigSize.isPlus;
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
26.02.2012, 21:01 #4
слышал о подобном глюке в компиляторах. когда сравнивают два буль значения, которые равны тру, но результат сравнения был равен false; видимо из-за представления буль переменных. в памяти могли оказаться не еденицы, а еденица и два. оба значения интерпретируются как тру, но если их сравнить, то они оказываются не равны.

можно попробовать это сравнения переписать булевыми операциями. !(val2 XOR val2) вроде или как-то так.

And не прокатит. потому что false && false будет false, а надо тру.
1
NoMasters
Псевдослучайный
1762 / 1105 / 73
Регистрация: 13.09.2011
Сообщений: 3,141
26.02.2012, 21:03 #5
DU, да, что-то я стормозил
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
26.02.2012, 21:05 #6
для локализации глюка можно попробовать такой тест написать
C++
1
2
3
4
bool b1 = 1;
bool b2 = 2;
bool b3 = (b1 == b2);
assert(b3);
и еще можно посматреть в память, где эти буль переменные хранятся. какие байты там.
0
Russian_Dragon
10 / 11 / 0
Регистрация: 18.02.2012
Сообщений: 140
26.02.2012, 21:13  [ТС] #7
Цитата Сообщение от dimcoder Посмотреть сообщение
Для теста можно просто сделать так:
C++
1
cout << this->isPlus << endl << numberBigSize.isPlus << endl;
И анализируем результат.

http://liveworkspace.org/code/49d625c81614344347da39dc3f238d03
Я просто breakpoint поставил.

Добавлено через 1 минуту
Цитата Сообщение от DU Посмотреть сообщение
для локализации глюка можно попробовать такой тест написать
C++
1
2
3
4
bool b1 = 1;
bool b2 = 2;
bool b3 = (b1 == b2);
assert(b3);
и еще можно посматреть в память, где эти буль переменные хранятся. какие байты там.
В отдельном проекте VS2008 корректно отработала.

Добавлено через 1 минуту
Цитата Сообщение от DU Посмотреть сообщение
слышал о подобном глюке в компиляторах. когда сравнивают два буль значения, которые равны тру, но результат сравнения был равен false; видимо из-за представления буль переменных. в памяти могли оказаться не еденицы, а еденица и два. оба значения интерпретируются как тру, но если их сравнить, то они оказываются не равны.
Ясно, спасибо, а то уж подумал, что я с ума схожу.
Цитата Сообщение от DU Посмотреть сообщение
можно попробовать это сравнения переписать булевыми операциями. !(val2 XOR val2) вроде или как-то так.
Спасибо, буду выкручиваться.
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
26.02.2012, 21:13 #8
тогда нужно смотреть в память и в дизмасме сгенеренный код.
ну еще возможно это вы глючите
0
Russian_Dragon
10 / 11 / 0
Регистрация: 18.02.2012
Сообщений: 140
26.02.2012, 21:31  [ТС] #9
DU, О, точно ты прав.
простая проверка дала результат:
int tt = (int)this->isPlus;
tt равен 204

Добавлено через 10 минут
Если кому интересно, глюк можно обойти так:

result.isPlus = (this->isPlus || false) == (numberBigSize.isPlus || false);
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
26.02.2012, 21:34 #10
такие штуки следует комментировать. иначе найдется кто-то, кто вернет такую абрукадабру к прежнему виду.
0
Russian_Dragon
10 / 11 / 0
Регистрация: 18.02.2012
Сообщений: 140
26.02.2012, 21:39  [ТС] #11
Цитата Сообщение от DU Посмотреть сообщение
такие штуки следует комментировать. иначе найдется кто-то, кто вернет такую абрукадабру к прежнему виду.
В данный момент это не опасно, т.к. я для себя пишу, максимум выложу dll-ку потом.
Меня больше пугает, как программа будет себя вести в других местах сравнений.
0
26.02.2012, 21:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2012, 21:39
Привет! Вот еще темы с ответами:

Значения True или False - C++
Состаить линейную программу, выводящую значение True, если указанное высказывание является истинным, и False- в противном случае: Квадрат...

Собственная функция true, false - C++
Приветствую, возникли проблемы с выполнением кода. Сначала показывал вроде правильно, потом я начал его исправлять, и вообще не показывает...

Перегрузка констант true и false - C++
помогите, а то не могу разобраться =(( перегрузка констант true и false: обращение к экземпляру класса дает значение true, если строка не...

Почему не меняется true/false? - C++
Добрый день! Написал простенькую программу с перегрузкой типов. 24 часовая система переводится в 12 часовую (с pm/am). У меня не...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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