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

Кто объяснит почему true == false ? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Snaiffer
2 / 2 / 0
Регистрация: 13.03.2011
Сообщений: 18
16.03.2011, 11:52     Кто объяснит почему true == false ? #1
Спасайте! а то я щас повешусь от взрыва мозга!

Кто объяснит вот что это за фигня.
Когда я в программе пишу:
C++
1
2
3
char a = 0x64;
char b = 0x9B;
short int getted_check_sum = a*0x100+b;
она мне выдает результат "getted_check_sum =0x639B"

А когда
C++
1
getted_check_sum = 0x64*0x100+0x9B;
результат "getted_check_sum =0x649B" Т.е. тот который по логике и должен быть!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2011, 11:52     Кто объяснит почему true == false ?
Посмотрите здесь:

C++ [C/C++]Компилятор g++.Странности с true и false.Кто нибудь может прокомментировать/повторить это у себя?
False,True C++
вывод true и false C++
C++ Глюк false = true == true;
С++. вывод true/false C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
16.03.2011, 12:15     Кто объяснит почему true == false ? #2
C++
1
2
3
4
5
6
7
8
9
#include <cstdio>
 
int main()
{
unsigned char a = 0x64;
unsigned char b = 0x9B;
short getted_check_sum = a*0x100+b;
printf( "%x", getted_check_sum );
}
Snaiffer
2 / 2 / 0
Регистрация: 13.03.2011
Сообщений: 18
16.03.2011, 12:52  [ТС]     Кто объяснит почему true == false ? #3
Спасибо, но не могли бы объяснить почему так?
Это получается что b было отрицательным? и вообще зачем символьному типу отрицательные значения?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
16.03.2011, 13:50     Кто объяснит почему true == false ? #4
Цитата Сообщение от Snaiffer Посмотреть сообщение
Это получается что b было отрицательным? и вообще зачем символьному типу отрицательные значения?
такова уж особенность, что в стандарте не определено какие значения может принимать char
-128 ... 127 или 0 ... 255
смысл, ну думаю в стародавнии времена когда память исчислялась килобайтами char использовали наравне с остальными типами для простых вычислений
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16833 / 5254 / 323
Регистрация: 30.03.2009
Сообщений: 14,145
Записей в блоге: 26
16.03.2011, 17:21     Кто объяснит почему true == false ? #5
alex_x_x, всё-таки конкретно в данном случае следовало бы объяснить тем, что char - знаковый. Если в char присвоить 0x9b, то старший (знаковый) бит равен единице, а потому величина будет отрицательная. Когда пишешь a*0x100+b, то имеем такой раскалад, что a и b - char'ы, а константа 0x100 имеет тип int (по стандарту константа без каких-либо модификаторов является int'ом). В результате чего a и b предварительно конвертируются в int (после чего действительно начинает играть роль то, что b - отрицательное).

Выражения "0x64*0x100+0x9B" и "a*0x100+b" НЕ эквивалентны. В нашем случае правильно было бы писать ( ((char)0x64) * 0x100 ) + ((char)0x9b) тогда ты получишь эквивалентное выражение
easybudda
16.03.2011, 17:35     Кто объяснит почему true == false ?
  #6

Не по теме:

Цитата Сообщение от Snaiffer Посмотреть сообщение
я щас повешусь от взрыва мозга!
Доктор Плейшнер в пятый раз выпрыгивал из окна, но яд всё не действовал. (с)

Yandex
Объявления
16.03.2011, 17:35     Кто объяснит почему true == false ?
Ответ Создать тему
Опции темы

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