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

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

Восстановить пароль Регистрация
 
Russian_Dragon
 Аватар для Russian_Dragon
10 / 11 / 0
Регистрация: 18.02.2012
Сообщений: 140
26.02.2012, 20:57     Глюк false = true == true; #1
Возник глюк, пишу:
result.isPlus = this->isPlus == numberBigSize.isPlus;

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

False,True C++
вывод true и false C++
C++ Значения True или False
С++. вывод true/false C++
true and false C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
26.02.2012, 21:00     Глюк false = true == true; #2
Цитата Сообщение от Russian_Dragon Посмотреть сообщение
"this->isPlus" и "numberBigSize.isPlus присвоить true не могу"
Для теста можно просто сделать так:
C++
1
cout << this->isPlus << endl << numberBigSize.isPlus << endl;
И анализируем результат.

http://liveworkspace.org/code/49d625...da39dc3f238d03
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
26.02.2012, 21:01     Глюк false = true == true; #3
Напиши лучше
C++
1
esult.isPlus = this->isPlus && numberBigSize.isPlus;
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
26.02.2012, 21:01     Глюк false = true == true; #4
слышал о подобном глюке в компиляторах. когда сравнивают два буль значения, которые равны тру, но результат сравнения был равен false; видимо из-за представления буль переменных. в памяти могли оказаться не еденицы, а еденица и два. оба значения интерпретируются как тру, но если их сравнить, то они оказываются не равны.

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

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

http://liveworkspace.org/code/49d625...da39dc3f238d03
Я просто 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) вроде или как-то так.
Спасибо, буду выкручиваться.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
26.02.2012, 21:13     Глюк false = true == true; #8
тогда нужно смотреть в память и в дизмасме сгенеренный код.
ну еще возможно это вы глючите
Russian_Dragon
 Аватар для Russian_Dragon
10 / 11 / 0
Регистрация: 18.02.2012
Сообщений: 140
26.02.2012, 21:31  [ТС]     Глюк false = true == true; #9
DU, О, точно ты прав.
простая проверка дала результат:
int tt = (int)this->isPlus;
tt равен 204

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

result.isPlus = (this->isPlus || false) == (numberBigSize.isPlus || false);
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
26.02.2012, 21:34     Глюк false = true == true; #10
такие штуки следует комментировать. иначе найдется кто-то, кто вернет такую абрукадабру к прежнему виду.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2012, 21:39     Глюк false = true == true;
Еще ссылки по теме:

C++ Задача на true or false
Собственная функция true, false C++
C++ Контейнерный класс True False

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

Или воспользуйтесь поиском по форуму:
Russian_Dragon
 Аватар для Russian_Dragon
10 / 11 / 0
Регистрация: 18.02.2012
Сообщений: 140
26.02.2012, 21:39  [ТС]     Глюк false = true == true; #11
Цитата Сообщение от DU Посмотреть сообщение
такие штуки следует комментировать. иначе найдется кто-то, кто вернет такую абрукадабру к прежнему виду.
В данный момент это не опасно, т.к. я для себя пишу, максимум выложу dll-ку потом.
Меня больше пугает, как программа будет себя вести в других местах сравнений.
Yandex
Объявления
26.02.2012, 21:39     Глюк false = true == true;
Ответ Создать тему
Опции темы

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