Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> strtol 
:(
    Опции темы
MAKCim
Дата 18.9.2008, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



возможно, глупый вопрос
почему
strtol("0xffffffff80000000", NULL, 16) 
возвращает LONG_MAX?
в мане написано, что LONG_MAX возвращается при переполнении
но у меня то указана СС по основанию 16, а там по определению не может быть префиксов '-' и '+'

система 64-х битная
компилятор GCC 4.3
libc-2.8

Это сообщение отредактировал(а) MAKCim - 18.9.2008, 23:03


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Fin
Дата 18.9.2008, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 3
Всего: 10



MAKCim, То число, которое ты привел в примере, оно больше чем LONG_MAX.


--------------------
Пролетал мимо.
PM MAIL   Вверх
586
Дата 18.9.2008, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 10
Всего: 146



Цитата
там по определению не может быть префиксов '-' и '+'

Ещё есть функция strtoul.

Это сообщение отредактировал(а) 586 - 18.9.2008, 23:48
PM   Вверх
MAKCim
Дата 18.9.2008, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(Fin @  18.9.2008,  23:35 Найти цитируемый пост)
То число, которое ты привел в примере, оно больше чем LONG_MAX. 

это число отрицательное  smile 
вполне себе валидный long 

Это сообщение отредактировал(а) MAKCim - 18.9.2008, 23:53


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Rpahut
Дата 19.9.2008, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 9.4.2006

Репутация: 2
Всего: 7



Или я чо-то не догоняю, или long - это 4 байта, т.е. максимум 8 символов в хексе.
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
J0ker
Дата 19.9.2008, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



я подозеваю что у вас long 4-х байтный


--------------------
user posted image
PM MAIL   Вверх
andrew_121
Дата 19.9.2008, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Rpahut, 
J0ker, 
По внимательней читайте.

Добавлено через 26 секунд
Цитата(MAKCim @  18.9.2008,  22:57 Найти цитируемый пост)
система 64-х битная




--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
J0ker
Дата 19.9.2008, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(andrew_121 @ 19.9.2008,  00:48)
Rpahut, 
J0ker, 
По внимательней читайте.

Добавлено @ 00:48
Цитата(MAKCim @  18.9.2008,  22:57 Найти цитируемый пост)
система 64-х битная

я прочитал
битность компилятора (и библиотек) от битности платформы не зависит
вполне возможно вы компилите 32-х битное приложение

UPD:
на 32bit платформе о же самое
проверяю чуть позже напишу в чем дело

UPD:
man
"When the value of the base is 16    (hexadecimal), the
           expected    form of    the subject sequence is    a string of
           alphanumeric characters optionally preceded by charac-
           ters "0x" or "0X", which    must follow an optional    ini-
           tial sign character, when present."

на hex распрстаняются те же правила что и на десятичные - значения больше 0x7FFFFFFF(FFFFFFFF - for 64bit) - интерпретируются как положительные

Это сообщение отредактировал(а) J0ker - 19.9.2008, 01:57


--------------------
user posted image
PM MAIL   Вверх
UnrealMan
Дата 19.9.2008, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(MAKCim @ 19.9.2008,  00:52)
Цитата(Fin @  18.9.2008,  23:35 Найти цитируемый пост)
То число, которое ты привел в примере, оно больше чем LONG_MAX. 

это число отрицательное  smile 
вполне себе валидный long

Исходное число положительное и в 64-хбитном long оно не представимо. Отрицательные числа идут лесом, т.к. семантически они не то же самое, что положительные числа, которые путём манипуляций с бинарным представлением можно переводить друг в друга. Поэтому поведение strtol вполне адекватное.
PM MAIL   Вверх
MAKCim
Дата 19.9.2008, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(UnrealMan @  19.9.2008,  02:38 Найти цитируемый пост)
Исходное число положительное и в 64-хбитном long оно не представимо

исходное число отрицательное и вполне представимо через long, потому как это и есть long
у нас СС = 16
вот ежели я бы написал +9223372036854775808 или -9223372036854775807
это было бы вполне очевидное переполнение знакового long

я то конечно полнял логику strtol(), но она абсолютно неправильная имхо

Это сообщение отредактировал(а) MAKCim - 19.9.2008, 09:06


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
xvr
Дата 19.9.2008, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(MAKCim @ 19.9.2008,  09:04)
Цитата(UnrealMan @  19.9.2008,  02:38 Найти цитируемый пост)
Исходное число положительное и в 64-хбитном long оно не представимо

исходное число отрицательное и вполне представимо через long, потому как это и есть long
у нас СС = 16
вот ежели я бы написал +9223372036854775808 или -9223372036854775807
это было бы вполне очевидное переполнение знакового long

я то конечно полнял логику strtol(), но она абсолютно неправильная имхо

strtol выдет ЗНАКОВЫЙ long, и ей абсолютно по барабану в какой системе счисления он записан (хоть в 32х ричной  smile )
man strtol:
Цитата

If the correct value is outside the range of representable values, {LONG_MIN},  {LONG_MAX},  {LLONG_MIN},  or
{LLONG_MAX} shall be returned (according to the sign of the value), and errno set to [ERANGE].
о параметре base ни звука  smile 
PM MAIL   Вверх
MAKCim
Дата 19.9.2008, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



xvr, 
ну 0xffffffff80000000 знаковый же  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
UnrealMan
Дата 19.9.2008, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(MAKCim @  19.9.2008,  10:04 Найти цитируемый пост)
исходное число отрицательное 

По-твоему, ffffffff80000000 - это в 16-ичной системе счисления отрицательное число? smile

Цитата(MAKCim @  19.9.2008,  10:04 Найти цитируемый пост)
у нас СС = 16

Вот именно, что тут система счисления в математическом смысле, а не 16-значный код, соответствующий бинарному представлению long.

Добавлено через 2 минуты и 39 секунд
Цитата(MAKCim @  18.9.2008,  23:57 Найти цитируемый пост)
но у меня то указана СС по основанию 16, а там по определению не может быть префиксов '-' и '+'

И чем же это 16-ичная позиционная система счисления хуже десятичной? smile 
PM MAIL   Вверх
W4FhLF
Дата 19.9.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Цитата(UnrealMan @  19.9.2008,  11:27 Найти цитируемый пост)
По-твоему, ffffffff80000000 - это в 16-ичной системе счисления отрицательное число?


А как по-твоему целые отрицательные числа представлены в памяти? 

Это сообщение отредактировал(а) W4FhLF - 19.9.2008, 13:24


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
MAKCim
Дата 19.9.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(UnrealMan @  19.9.2008,  11:27 Найти цитируемый пост)
И чем же это 16-ичная позиционная система счисления хуже десятичной? 

знак зашит в разряде  smile 
причем его можно определить без '+' и '-'


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0610 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.