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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Snaiffer
2 / 2 / 0
Регистрация: 13.03.2011
Сообщений: 18
#1

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

16.03.2011, 11:52. Просмотров 1070. Ответов 5
Метки нет (Все метки)

Спасайте! а то я щас повешусь от взрыва мозга!

Кто объяснит вот что это за фигня.
Когда я в программе пишу:
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 ?
Посмотрите здесь:

Еще один глюк. На этот раз с printf. Объяснит мне кто-нибудь в чем прикол??? C++
C++ [C/C++]Компилятор g++.Странности с true и false.Кто нибудь может прокомментировать/повторить это у себя?
False,True C++
вывод true и false C++
C++ Значения True или False
C++ Глюк false = true == true;
С++. вывод true/false C++
true and false C++
C++ Перегрузка констант true и false
C++ Задача на true or false
Непонятная ошибка, кто объяснит? C++
C++ Контейнерный класс True False

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Эксперт CАвтор FAQ
 Аватар для Evg
17188 / 5442 / 337
Регистрация: 30.03.2009
Сообщений: 14,769
Записей в блоге: 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 ?
Ответ Создать тему
Опции темы

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