![]() |
|
Модераторы: bsa |
![]()
|
|
| densa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.4.2009 Репутация: нет Всего: нет |
Подскажите как можно конвертировать число из десятичной системы исчисления в 17чную.
Если я понял правильно, то нужно создать массив, который будет содержать 1, 2, ..., G и по алгоритму деления на основание? |
|||
|
||||
| Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 1 Всего: 6 |
Примерно так же как и в 16 - ю, 2 - ю... Скажи, а зачем тебе 17 - я СС? -------------------- |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Gordon, ну тогда бы пример конвертирования в 16ричную привели бы
|
|||
|
||||
| Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 1 Всего: 6 |
Вот, кривова-то (сильно не ругайте, лучше дайте конструктивный совет), но для понимания принципа думаю хватит:
Это сообщение отредактировал(а) Gordon - 24.7.2009, 21:11 -------------------- |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
С Вашего позволения, немного модифицирую
Это сообщение отредактировал(а) Леопольд - 25.7.2009, 02:40 -------------------- вопросов больше чем ответов |
|||
|
||||
| Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 1 Всего: 6 |
В принципе можно и без массива сделать, вроде...
-------------------- |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
||||
|
||||
| Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 1 Всего: 6 |
Может просто хочется мозг поиметь потренировать... -------------------- |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
||||
|
||||
| densa |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.4.2009 Репутация: нет Всего: нет |
Начал учить Си и вот решил поломать голову Не пойму, что мы делаем вот этим
|
||||
|
|||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Я тоже сначала о ней подумал, но вот беда... (с) cplusplus.com Portability This function is not defined in ANSI-C and is not part of C++, but is supported by some compilers. g++ 4.3.3 (linux) не знает такой функции. Спецификацию исключений убрал почти сразу, но не потому что считаю её гадостью, а потому что не знаю какие исключения порождает std::string P.S. Оказалось, забыл убрать, но хотел, да так, что думал что убрал Это сообщение отредактировал(а) Леопольд - 25.7.2009, 02:25 -------------------- вопросов больше чем ответов |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Ну это уже автору решать, использовать нестандартные функции или нет. Я как вариант предложил.
А зря..самая натуральная гадость (это я мягко выражаюсь) Не надо их вообще использовать, почитайте доклад Герба Саттера по поводу спецификации исключений http://www.gotw.ca/publications/mill22.htm или посмотрите в книге more exceptional C++, Задача 13. Прагматичный взгляд на спецификации исключений. Это сообщение отредактировал(а) azesmcar - 25.7.2009, 09:34 |
|||
|
||||
| Gordon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 1 Всего: 6 |
С одной стороны да, но с другой, реально функция может породить и другие исключения, не указанные в спецификации! densa,
Функция возвращает в виде строки число в СС с основанием N. Или что ты не понял? Это сообщение отредактировал(а) Gordon - 25.7.2009, 10:08 -------------------- |
||||
|
|||||
| Леопольд |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Если подумать, то пользы от них действительно никакой, а вот вред может быть - например, callback функция порождает исключение, которого нет в спецификации той функции, которая её вызывает. Хотя, пустую спецификацию, я иногда использовал, в специфичных случаях, например, при наследовании от std::exception надо переопределить what с пустой спецификацией, иначе g++ не компилит Добавлено @ 10:09
Присваивание лишнее, конструктор по умолчанию делает пустую строку. Т.е. так:
Это сообщение отредактировал(а) Леопольд - 25.7.2009, 10:28 -------------------- вопросов больше чем ответов |
||||||||
|
|||||||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
польза есть. иначе пустую спецификацию исключений не использовали бы в бусте. Это сообщение отредактировал(а) zim22 - 25.7.2009, 10:12 |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Да, это единственный вид спецификации исключений которые можно использовать, но это может повлиять на производительность программы, так как некоторые компиляторы могут не встраивать функции со спецификацией исключений.
|
||||
|
|||||
| Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 1 Всего: 6 |
Делает, но с присваиванием более наглядно, хотя... -------------------- |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Это вызов лишней функции std::string::operator= (char*) Я ещё заменил все s = char + s на s += char, по тем же соображениям, так намного быстрее. ещё можно s.reserve(x) добавить после объявления переменной s. Это сообщение отредактировал(а) Леопольд - 25.7.2009, 10:33 -------------------- вопросов больше чем ответов |
|||
|
||||
| Gordon |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 1 Всего: 6 |
и
немного разные вещи... А так спасибо за замечания! Добавлено через 5 минут и 50 секунд Леопольд, а 100% будет вызыватья std::string::operator= (char*)? Добавлено через 11 минут и 12 секунд Допустим, такой класс:
потои я создаю объекты:
оба раза вызывается "A(int)", т.е. может там компилятор что-то вроде оптимизации проводит? p.s. с типом std::string так же, или нет? -------------------- |
||||||||||
|
|||||||||||
| Леопольд |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Не за что Я бы даже сказал что это совсем разные вещи В одном случае вызывается встраиваемая функция для добавления в конец строки, которая, возможно, должна быть увеличена в размерах, но совсем не обязательно. Где-то отложилось в памяти что по умолчанию на любую строку выделяется что-то вроде 32 символов. В другом, конструируется новая копия строки, в которую помещается результат конкатенации символа и строки, причём всё в строке должно быть сдвинуто вправо. После этого эта копия присваивается аккумулирующей строке. Ещё есть бага в функции, связанная с тем что наименьшая система счисления двоичная. Эта бага может привести к бесконечному циклу, или делению на ноль Добавлено @ 10:59
Я ошибся! std::string s("init string"); Это сообщение отредактировал(а) Леопольд - 25.7.2009, 11:07 -------------------- вопросов больше чем ответов |
||||
|
|||||
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
в первом случае вызывается конструктор преобразования A(int n). все конструкторы с одним параметром - конструкторы преобразования. во-втором случае вы явно вызываете конструктор с одним параметром. *** сделайте конструктор явным и увидите ошибку.
Это сообщение отредактировал(а) zim22 - 25.7.2009, 11:03 |
||||
|
|||||
| Леопольд |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Это один и тот же конструктор, квалификатор explicit просто запрещает использовать его для неявных преобразований. Соответственно его нельзя будет вызвать таким синтаксисом type x = val;
Думаю, это уже достаточно веская причина для инициализации в скобках а не при помощи = Это сообщение отредактировал(а) Леопольд - 25.7.2009, 11:14 -------------------- вопросов больше чем ответов |
||||||
|
|||||||
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
ну да. один и тот же. в-первом случае он вызывается неявно во-втором - явно.
это разные вещи.
Язык С++ поддерживает две формы инициализации переменных: инициализация копии( copy-initialization) и прямая инициализация(direct-initialization). различия между ними в том, что в случае инициализации копии больше накладных расходов. сначала создаётся временный объект, потом идёт присвоение результату. Кроме того прямая инициализация гибче, т.к. можно указать любое количество параметров конструктора. |
||||
|
|||||
| Леопольд |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
В обоих случаях выполняется один и тот же код. Если для инициализации нужен временный объект, то он будет создан в обоих случаях. Но вариант с = запрещён, если использовать explicit.
Это сообщение отредактировал(а) Леопольд - 25.7.2009, 11:25 -------------------- вопросов больше чем ответов |
||||||
|
|||||||
| Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 1 Всего: 6 |
Ну это да! А explicit запрещает неявные вызовы конструктора. Мне интересно, может ли компилятор это - "int i = 10;", заменить int i(10); ? -------------------- |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Именно так он и сделает, если нет explicit. -------------------- вопросов больше чем ответов |
|||
|
||||
| Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 1 Всего: 6 |
int i(10); // прямая инициализация int i = 10; // инициализация копии имеют одинаковую эффективность, так? -------------------- |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
для встроенных типов данных - да. для классов - нет. для классов прямая инициализация быстрей. т.к. копия не создаётся. *** разрешён.
Это сообщение отредактировал(а) zim22 - 25.7.2009, 12:02 |
|||
|
||||
| Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 1 Всего: 6 |
zim22, а чем эта копия потом присваивается объявляемому объекту, я пробовал operator = и конструктор копирования делать закрытыми, и все равно код работал... Это сообщение отредактировал(а) Gordon - 25.7.2009, 11:56 -------------------- |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
|
|||
|
||||
| Леопольд |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
запрещён
Это сообщение отредактировал(а) Леопольд - 25.7.2009, 12:24 -------------------- вопросов больше чем ответов |
||||||
|
|||||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
||||
|
||||
| Леопольд |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Это вызовы разных конструкторов.
А это одного и того же. -------------------- вопросов больше чем ответов |
||||||
|
|||||||
| Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 1 Всего: 6 |
не, ну так понятно, а если что-то вроде этого:
-------------------- |
|||
|
||||
| Леопольд |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Угу, точно. Поправил. Добавлено @ 12:28
Здесь запрет копирования.
Пытается вызвать конструктор копирования... zim22 прав Это сообщение отредактировал(а) Леопольд - 25.7.2009, 12:33 -------------------- вопросов больше чем ответов |
||||||||
|
|||||||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Леопольд,
zim22, Я чего-то не пойму о чем вы Леопольд примеры с explicit показывает, вы - без..и спорите о чем-то? О чем? |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
В чём разница между 1. type obj(val); 2. type obj = val; Он мне напомнил что второй вариант, это неявный вызов конструктора копирования. -------------------- вопросов больше чем ответов |
|||
|
||||
| Gordon |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 1 Всего: 6 |
У меня такой код работает!
А вот такое создание уже не работает!
Это сообщение отредактировал(а) Gordon - 25.7.2009, 12:44 -------------------- |
||||||
|
|||||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
||||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
компиляторы могут так соптимизировать код, что конструктор копирования вызываться не будет. что собственно и происходит. здорово! http://codepad.org/gncCk9z6 Это сообщение отредактировал(а) zim22 - 25.7.2009, 12:45 |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
||||
|
||||
| Леопольд |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Это Visual Studio. Добавлено @ 12:48
Уже ни о чём, zim22 выиграл Это сообщение отредактировал(а) Леопольд - 25.7.2009, 12:58 -------------------- вопросов больше чем ответов |
||||
|
|||||
| Gordon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 1 Всего: 6 |
zim22, в код:
может компилироваться по разному, в зависимости от компилятора, так получается?! Добавлено @ 12:54 Да, она самая! Добавлено @ 12:56 Короче, лучше по воможности писать так:
чтобы не надеяться на компилятор! Да? Это сообщение отредактировал(а) Gordon - 25.7.2009, 13:01 -------------------- |
||||
|
|||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
По идее, type obj = val; должно развернуться в type obj(type( val_type)) ; Если этого не происходит, значит компилятор не соответствует стандарту. Это сообщение отредактировал(а) Леопольд - 25.7.2009, 15:23 -------------------- вопросов больше чем ответов |
|||
|
||||
| Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 1 Всего: 6 |
Ладно, спасибо всем за разъяснения...
p.s. Тему "слегка" изменили... -------------------- |
|||
|
||||
| Леопольд |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Но для встроенных типов это аналогично int i = 0; что на мой взгляд читабельнее, и я инициализирую встроенные типы так. Но не в списке инициализации конструктора. MyInt::MyInt(int i_) : i(i_) {} Это сообщение отредактировал(а) Леопольд - 25.7.2009, 13:13 -------------------- вопросов больше чем ответов |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Спасибо! Сложно впервые смотреть Lost и одновременно думать про С++ -------------------- вопросов больше чем ответов |
|||
|
||||
| densa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.4.2009 Репутация: нет Всего: нет |
А кто подскажет как в чистом Си заменить string ?
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
||||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
описать свою структуру и набор функций к ней. |
|||
|
||||
| densa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.4.2009 Репутация: нет Всего: нет |
||||
|
||||
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
у меня сейчас нет времени пример вам набрасывать. смотрите набор функций для класса string в MSDN. и реализовываете их аналоги. только на С.
что-то типа такого:
Это сообщение отредактировал(а) zim22 - 26.7.2009, 19:13 |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |