Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
9 / 9 / 1
Регистрация: 01.07.2012
Сообщений: 138
1

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

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

Author24 — интернет-сервис помощи студентам
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

Интересно, почему?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.12.2012, 18:37
Ответы с готовыми решениями:

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

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

short int и short
Какая разница, инициализирую я переменную как short int или же как short ? Вроде и тот, и тот тип...

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

7
CEO SOVAZ Corp.
386 / 232 / 51
Регистрация: 17.12.2011
Сообщений: 822
Записей в блоге: 1
19.12.2012, 18:39 2
sizeof(a + b) = short + short.
short = 2.
2 + 2 = 4
0
9 / 9 / 1
Регистрация: 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
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
19.12.2012, 18:43 4
Цитата Сообщение от ramybozy Посмотреть сообщение
Как это тогда обоснуете?
Результат имеет тип int
0
9 / 9 / 1
Регистрация: 01.07.2012
Сообщений: 138
19.12.2012, 18:46  [ТС] 5
Я это понимаю, но непонятно с чего ради, складывая два коротких, мы вдруг получаем целое.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
19.12.2012, 18:56 6
Цитата Сообщение от ramybozy Посмотреть сообщение
Я это понимаю, но непонятно с чего ради, складывая два коротких, мы вдруг получаем целое.
тогда рассмотрите моменты:
C++
1
sizeof(9+0)
C++
1
sizeof(a+0)
0
9 / 9 / 1
Регистрация: 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

То есть в одном случае есть расширяющие преобразования, а в другом нет.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 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, то второй операнд преобразуется к этому же типу.
Взято с
2
19.12.2012, 19:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2012, 19:07
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru