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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
zzz_
5 / 5 / 0
Регистрация: 08.05.2011
Сообщений: 215
#1

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

02.05.2012, 23:33. Просмотров 2486. Ответов 19
Метки нет (Все метки)

Объясните пожалуйста на пальцах, а то всё уже обгуглил. Где говорят - зависит от компилятора или архитектуры, где правила какие-то - объясните.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2012, 23:33     Неявное приведение типов
Посмотрите здесь:

Запретить неявное приведение - C++
Нужна функция с двумя формальными параметрами типа uint64_t, требуется запретить неявное приведение фактических параметров к этому типу,...

Неявное приведение указателей на классы - C++
Всем привет! Обнаружилась вот такая нестыковочка: имеем интерфейсный класс IIn. И имеем класс-наследник ExtIn : public IIn далее...

Запретить неявное приведение возвращаемого значения - C++
Есть функция, возвращающая объект класса, имеющего оператор приведения к uint64_t. Требуется запретить неявное приведение возвращаемого...

Неявное преобразование типов - C++
Здравствуйте, определен класс: template<typename T> class Polynomial { public: explicit...

Неявное преобразование типов? - C++
есть класс Vector затем с его помощью создается класс Matrix (матрица - массив векторов) дошла очередь до операции умножения матрицы...

Неявное преобразование типов - C++
если я правильно понял, то explicit работает таким образом: class abc { int x; public: abc(int x_):x(x_){} ~abc(){} };

Продемонстровать неявное преобразование типов: из целого в вещественный и обратно - C++
Помогите решить задачи по С++, никак не могу, вся надежда только на вас. 1. Даны вещественные и целые числа. Наглядно продемонстрируйте...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
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
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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++
Доброго времени суток! В общем, есть класс Matrix(прямоугольные над полем вещ. чисел). Необходимо реализовать приведение типов Matrix...

Приведение типов. - C++
Столкнулся с задачей считывания данных из символьного массива с дальнейшим отбором из всего этого чисел и перезаписи их в массив типа...

Приведение типов - C++
Доброго времени суток. Пусть имеются две структуры struct Student { string FirstName; string LastName; int year;

Приведение типов - C++
В паскале можно привести типы: type ts = 0..9; chislo = array of ts; Как это сделать на С++?

Приведение типов - C++
в GUI ни int str = static_convert&lt;int&gt;(Edit1-&gt;Text) ни int str = (int)Edit1-&gt;Text не приводит : E2034 Cannot convert...


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

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

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