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

Неявное приведение типов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
zzz_
5 / 5 / 0
Регистрация: 08.05.2011
Сообщений: 215
02.05.2012, 23:33     Неявное приведение типов #1
Объясните пожалуйста на пальцах, а то всё уже обгуглил. Где говорят - зависит от компилятора или архитектуры, где правила какие-то - объясните.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
 Аватар для Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
02.05.2012, 23:36     Неявное приведение типов #2
Ну если приведение типа возможно то оно будет произведено, например char можно привести к int, а все стандартные типы к bool. Неявным приведение типов называется когда компилятор сам догадывается что вы хотите привести тип и делает это, при этом обычно выдавая предупреждение если неявное приведение типа подозрительно. Что конкретно вас интересует?
zzz_
5 / 5 / 0
Регистрация: 08.05.2011
Сообщений: 215
02.05.2012, 23:54  [ТС]     Неявное приведение типов #3
Например при присваивании
C++
1
char i = 256;//А на char у нас есть только 8 бит.
Что тут происходит? а что при
C++
1
i=1560;
Общий принцип я понял, что меньший к большему.

Добавлено через 15 минут
Также непонятно, какие типы платформно-зависимые?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
03.05.2012, 00:10     Неявное приведение типов #4
Все типы зависят от платформы, кроме char.
1 == sizeof( char ) <= sizeof( short int ) <= sizeof( int ) <= sizeof( long int ) <= sizeof( long long int )

Добавлено через 40 секунд
Цитата Сообщение от zzz_ Посмотреть сообщение
Что тут происходит? а что при
Происходит переполнение.
zzz_
5 / 5 / 0
Регистрация: 08.05.2011
Сообщений: 215
03.05.2012, 00:13  [ТС]     Неявное приведение типов #5
Просто мне странно, что C# к примеру при замере указателя на int выдает 4 байта. А Borland C++ - 2 байта.

Добавлено через 27 секунд
Цитата Сообщение от Toshkarik Посмотреть сообщение
Все типы зависят от платформы, кроме char.
1 == sizeof( char ) <= sizeof( short int ) <= sizeof( int ) <= sizeof( long int ) <= sizeof( long long int )

Добавлено через 40 секунд

Происходит переполнение.
И что записывается?

Добавлено через 1 минуту
Цитата Сообщение от Toshkarik Посмотреть сообщение
платформы
Платформы системы или процессора?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
03.05.2012, 00:17     Неявное приведение типов #6
Цитата Сообщение от zzz_ Посмотреть сообщение
А Borland C++ - 2 байта.
В борланде размер 2 == sizeof( short int ) == sizeof( int ). 4 байта там long int. В большинстве современных компиляторах short int равен 2 байтам а int и long int равны 4 байтам.
zzz_
5 / 5 / 0
Регистрация: 08.05.2011
Сообщений: 215
03.05.2012, 00:17  [ТС]     Неявное приведение типов #7
А вообще как преобразуются знаковые и беззнаковые типы?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
03.05.2012, 00:18     Неявное приведение типов #8
Цитата Сообщение от zzz_ Посмотреть сообщение
Платформы системы или процессора?
Скорее от реализации компилятора.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
03.05.2012, 00:20     Неявное приведение типов #9
Цитата Сообщение от zzz_ Посмотреть сообщение
Например при присваивании
C++
1
char i = 256;//А на char у нас есть только 8 бит.
Что тут происходит? а что при
C++
1
i=1560;
Общий принцип я понял, что меньший к большему.

Добавлено через 15 минут
Также непонятно, какие типы платформно-зависимые?
в вашем случае присходит переполнение переменной. компилятор отсечет старшие биты, т.е. оставит в переменной остаток от деления по модулю исходного числа на значение диапазона(256 для char).
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
03.05.2012, 00:20     Неявное приведение типов #10
Цитата Сообщение от zzz_ Посмотреть сообщение
И что записывается?
Ну как я понял, например, при unsigned char a = 257 "а" будет равна 1.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
03.05.2012, 00:22     Неявное приведение типов #11
Цитата Сообщение от zzz_ Посмотреть сообщение
А вообще как преобразуются знаковые и беззнаковые типы?
под преобразованием вы имете ввиду, как ведет себя компилятор в случае переполнения?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
03.05.2012, 00:22     Неявное приведение типов #12
Цитата Сообщение от zzz_ Посмотреть сообщение
А вообще как преобразуются знаковые и беззнаковые типы?
Тут я Вам посоветую почитать о представлении знаковых чисел в компьютерных системах.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
03.05.2012, 00:23     Неявное приведение типов #13
Цитата Сообщение от Toshkarik Посмотреть сообщение
Ну как я понял, например, при unsigned char a = 257 "а" будет равна 1.
delete
zzz_
5 / 5 / 0
Регистрация: 08.05.2011
Сообщений: 215
03.05.2012, 00:25  [ТС]     Неявное приведение типов #14
Цитата Сообщение от Toshkarik Посмотреть сообщение
Тут я Вам посоветую почитать о представлении знаковых чисел в компьютерных системах.
Ну вроде старший бит под знак - 1 есть знак, 0 - нет знака. Или наоборот?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
03.05.2012, 00:26     Неявное приведение типов #15
Цитата Сообщение от antoha398 Посмотреть сообщение
правильный ответ 0 =)
Правильный ответ 1.
Так как верхняя граница равна 255.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
03.05.2012, 00:28     Неявное приведение типов #16
Цитата Сообщение от Toshkarik Посмотреть сообщение
Правильный ответ 1.
Так как верхняя граница равна 255.
да, да.. пардон, ошибочка.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
03.05.2012, 00:28     Неявное приведение типов #17
Цитата Сообщение от zzz_ Посмотреть сообщение
Ну вроде старший бит под знак - 1 есть знак, 0 - нет знака. Или наоборот?
Нет, не все так просто. -1 будет в двоичном представлении не 1000 0001 как Вы бы могли подумать в случае с char а 1111 1111.
zzz_
5 / 5 / 0
Регистрация: 08.05.2011
Сообщений: 215
03.05.2012, 00:40  [ТС]     Неявное приведение типов #18
Цитата Сообщение от Toshkarik Посмотреть сообщение
Правильный ответ 1.
Так как верхняя граница равна 255.
256 в двоичной - 100000000. Обрезаем старший бит - будет 0. Почему 1, то?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
03.05.2012, 00:48     Неявное приведение типов #19
Я писал 257 а не 256 При 256 будет 0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2012, 00:49     Неявное приведение типов
Еще ссылки по теме:

Запретить неявное приведение возвращаемого значения C++
Продемонстровать неявное преобразование типов: из целого в вещественный и обратно C++
C++ Неявное преобразование типов
C++ Неявное приведение указателей на классы
приведение типов C++

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

Или воспользуйтесь поиском по форуму:
zzz_
5 / 5 / 0
Регистрация: 08.05.2011
Сообщений: 215
03.05.2012, 00:49  [ТС]     Неявное приведение типов #20
А с отрицанием я понял - прибавляем единицу к каждому разряду и добавляем старший бит - 1.
Yandex
Объявления
03.05.2012, 00:49     Неявное приведение типов
Ответ Создать тему
Опции темы

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