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

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

Войти
Регистрация
Восстановить пароль
 
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
#1

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

19.12.2012, 18:37. Просмотров 413. Ответов 7
Метки нет (Все метки)

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++):

Undefined reference to Out32(short, short) - C++
Всем привет.подскажите в чём может быть проблема?Сode::Blocks ос Win7x32. вроде все библиотеки inpout32 прикручены к проекту...но я так...

Программа, которая выводит на экран значение функции sizeof от типов short, int, long и тд - C++
Кого не затруднит, создайте новый проект. Определите размерность базовых типов в вашей системе. Для этого напишите программу, которая...

short int и short - C++
Какая разница, инициализирую я переменную как short int или же как short ? Вроде и тот, и тот тип данных компилятор понимает :)

Почему макс short int равен 65535? - C++
Делаю sizeof() получаю 4 байта 1байт=8бит те 4байта=32 бита но бит это 0 или 1 таки образом есть последовательность из 0 и 1...

Длина short[] - Почему размер массива внутри make отличается? - C++
Доброе время суток, господа. #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; using namespace std; template...

Разница int, short, unsigned int, unsigned short - C++
Есть например цикл который проходит по массиву в котором 100 элементов. В чем практическая выгода и разница в истоьзовании типов short,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
19.12.2012, 18:39 #2
sizeof(a + b) = short + short.
short = 2.
2 + 2 = 4
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
19.12.2012, 18:42  [ТС] #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
Модератор
Эксперт CЭксперт С++
13154 / 7417 / 831
Регистрация: 27.09.2012
Сообщений: 18,254
Записей в блоге: 3
Завершенные тесты: 1
19.12.2012, 18:43 #4
Цитата Сообщение от ramybozy Посмотреть сообщение
Как это тогда обоснуете?
Результат имеет тип int
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
19.12.2012, 18:46  [ТС] #5
Я это понимаю, но непонятно с чего ради, складывая два коротких, мы вдруг получаем целое.
Croessmah
Модератор
Эксперт CЭксперт С++
13154 / 7417 / 831
Регистрация: 27.09.2012
Сообщений: 18,254
Записей в блоге: 3
Завершенные тесты: 1
19.12.2012, 18:56 #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  [ТС] #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

То есть в одном случае есть расширяющие преобразования, а в другом нет.
Croessmah
Модератор
Эксперт CЭксперт С++
13154 / 7417 / 831
Регистрация: 27.09.2012
Сообщений: 18,254
Записей в блоге: 3
Завершенные тесты: 1
19.12.2012, 19:07 #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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2012, 19:07
Привет! Вот еще темы с ответами:

short vs int - C++
Зачем в си два типа данных (short, int) с одинаковым диапазоном значений?

Short long - C++
Здравствуйте. Я новичек в C++ и, читая книгу, наткнулся на такой заинтересовавший меня абзац. У меня возникло несколько вопросов...

Сложение short чисел - C++
Посчитайте сумму чисел 17233 и 21413, при условии что вы работаете со знаковыми 16 битными числами, представленными дополнением до 2. ...

Тип unsigned short - C++
#include&lt;iostream&gt; using namespace std; unsigned short int USHORT; int main() { USHORT benq = 5;


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.12.2012, 19:07
Ответ Создать тему
Опции темы

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