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

Почему такой вывод (sizeof(short + short) - 4) - C++

Восстановить пароль Регистрация
 
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
19.12.2012, 18:37     Почему такой вывод (sizeof(short + short) - 4) #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int _tmain(int argc, _TCHAR* argv[])
{
    short a = 3;
    short b = 5;
 
    cout << sizeof(a) << endl;
    cout << sizeof(b) << endl;
    cout << sizeof(a + b) << endl;
 
    
    
    return EXIT_SUCCESS;
}
Думал, что вывод будет
2
2
2

А вот оказалось, что:
2
2
4

Интересно, почему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2012, 18:37     Почему такой вывод (sizeof(short + short) - 4)
Посмотрите здесь:

C++ short vs int
C++ short int и short
C++ Разница int, short, unsigned int, unsigned short
C++ Как записать Short в два char'a?
Константа типа short C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
19.12.2012, 18:39     Почему такой вывод (sizeof(short + short) - 4) #2
sizeof(a + b) = short + short.
short = 2.
2 + 2 = 4
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
19.12.2012, 18:42  [ТС]     Почему такой вывод (sizeof(short + short) - 4) #3
Как это тогда обоснуете?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int _tmain(int argc, _TCHAR* argv[])
{
    char a = '\n';
    char b = '\t';
 
    cout << sizeof(a) << endl;
    cout << sizeof(b) << endl;
    cout << sizeof(a + b) << endl;
 
    
    
    return EXIT_SUCCESS;
}
Вывод:
1
1
4
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 768
Регистрация: 27.09.2012
Сообщений: 16,845
Записей в блоге: 2
Завершенные тесты: 1
19.12.2012, 18:43     Почему такой вывод (sizeof(short + short) - 4) #4
Цитата Сообщение от ramybozy Посмотреть сообщение
Как это тогда обоснуете?
Результат имеет тип int
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
19.12.2012, 18:46  [ТС]     Почему такой вывод (sizeof(short + short) - 4) #5
Я это понимаю, но непонятно с чего ради, складывая два коротких, мы вдруг получаем целое.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 768
Регистрация: 27.09.2012
Сообщений: 16,845
Записей в блоге: 2
Завершенные тесты: 1
19.12.2012, 18:56     Почему такой вывод (sizeof(short + short) - 4) #6
Цитата Сообщение от ramybozy Посмотреть сообщение
Я это понимаю, но непонятно с чего ради, складывая два коротких, мы вдруг получаем целое.
тогда рассмотрите моменты:
C++
1
sizeof(9+0)
C++
1
sizeof(a+0)
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
19.12.2012, 19:03  [ТС]     Почему такой вывод (sizeof(short + short) - 4) #7
Рассматривал.

ТОгда бы логично было, чтобы вывод вот такой программы

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int _tmain(int argc, _TCHAR* argv[])
{
    char a = '\n';
    char b = '\t';
 
    cout << sizeof(a) << endl;
    cout << sizeof(b) << endl;
    cout << sizeof(a + b) << endl;
 
    
    
    return EXIT_SUCCESS;
}
был бы
4
4
8

А оно уже
4
4
4

То есть в одном случае есть расширяющие преобразования, а в другом нет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2012, 19:07     Почему такой вывод (sizeof(short + short) - 4)
Еще ссылки по теме:

Длина short[] - Почему размер массива внутри make отличается? C++
Тип unsigned short C++
C++ Short long

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 768
Регистрация: 27.09.2012
Сообщений: 16,845
Записей в блоге: 2
Завершенные тесты: 1
19.12.2012, 19:07     Почему такой вывод (sizeof(short + short) - 4) #8
Цитата Сообщение от ramybozy Посмотреть сообщение
То есть в одном случае есть расширяющие преобразования, а в другом нет.
Арифметические преобразования.
1. Операнды типа float преобразуются к типу double.
2. Если один операнд long double, то второй преобразуется к этому же типу.
3. Если один операнд double, то второй также преобразуется к типу double.
4. Любые операнды типа char и short преобразуются к типу int.
5. Любые операнды unsigned char или unsigned short преобразуются к типу unsigned int.
6. Если один операнд типа unsigned long, то второй преобразуется к типу unsigned long.
7. Если один операнд типа long, то второй преобразуется к типу long.
8. Если один операнд типа unsigned int, то второй операнд преобразуется к этому же типу.
Взято с StudFiles
Yandex
Объявления
19.12.2012, 19:07     Почему такой вывод (sizeof(short + short) - 4)
Ответ Создать тему
Опции темы

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