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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> signed и unsigned, Нарушение диапазона 
V
    Опции темы
666TEHb666
Дата 25.10.2008, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 5.10.2008
Где: Новокузнецк

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



Начал экспериментировать со встроенными типами данных и натолкнулся на одну непонятную мне вещь.Разъясните, пожалуйста.

Суть в том,что при указании unsigned short для переменной все нормально. При превышении диапазона отсчет значений начинается заново,с нуля.При нарушении нижней границы( -1,-2 и т.д.) отсчет начинается с максимального значения(65535 и т.д.). Но эта вполне логическая зависимость не работает для unsigned int и unsigned long. При вводе -1 консоль выводит -1 и т.д. При нарушении верхней границы диапазона отсчет значений начинается заново с отрицательных чисел...Если не ошибаюсь unsigned long предусматривает беззнаковое длинное целое.Так почему же хранит и отображает отрицательные числа?

Это сообщение отредактировал(а) 666TEHb666 - 25.10.2008, 21:46
PM MAIL ICQ Skype   Вверх
KEHT
Дата 25.10.2008, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: нет
Всего: 1



Чем компилировали?
PM MAIL   Вверх
maxim1000
Дата 25.10.2008, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 1
Всего: 110



signed/unsigned, скорее указывает, как интерпретировать последовательность бит, хранимую в переменной
значениям signed int -1 и unsiged int 2^32-1 соответствуют одинаковые битовые последовательности
и при приведении к другому типу они будут переходить друг в друга
так что, как такового хранения знаковых или беззнаковых чисел не происходит - хранятся битовые последовательности, а их интерпретация зависит от типа

то, что при передаче unsigned выводятся отрицательные числа, скорее всего, означает, что внутри происходит приведение к signed int
в случае с unsigned short старшая половина int просто заполняется нулями, так чт выводится правильно
в случае с signed short старшая половина int заполняертся старшим битом числа
а вот в случае с unsigned int просто происходит приведение, которое переводит (2^32-1) в -1

это я всё к чему?
код в вывода студию smile


--------------------
qqq
PM WWW   Вверх
triclosan
Дата 25.10.2008, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

unsigned int i = std::pow(2.0,32)-1;
std::cout<< i<<'\t'; 
std::cout<< ++i;

# 4294967295      0

Можно ваш ехе-шник поглядеть?
PM MAIL   Вверх
J0ker
Дата 25.10.2008, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



я думаю чел это делает через printf с типом формата d  smile 


--------------------
user posted image
PM MAIL   Вверх
666TEHb666
Дата 25.10.2008, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 5.10.2008
Где: Новокузнецк

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



J0ker,вы правы,через него и делаю))
...
unsigned val=-1;
printf("%4d",val);
...

Дело в том,что Си я только начал изучать,до этого учился на Паскале и для меня подобные манипуляции с типами пока плохо усваиваются.Для того и обращаюсь к вам за помощью.Вся ошибка в неправильной(для данной ситуации) функции вывода?Я правильно понял?Она автоматически переводит unsigned int в signed?

KEHT,компилировал в Visual Studio 2005 Express Edition.

triclosan,думаю экзешник уже не понадобится),но спасибо за помощь


Это сообщение отредактировал(а) 666TEHb666 - 26.10.2008, 00:07
PM MAIL ICQ Skype   Вверх
triclosan
Дата 26.10.2008, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



%u
PM MAIL   Вверх
666TEHb666
Дата 26.10.2008, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 5.10.2008
Где: Новокузнецк

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



Благодарю,разобрался))Вопрос решен
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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