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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как записать число -1, в формате 0x???? 
:(
    Опции темы
xTr1m
Дата 10.12.2009, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



День добрый. Вопрос вроде простой, но увы не могу найти ответ. хочу написать так
Код

int number = 0x8000;

и получить number = -1. Естественно, так не получается, а как можно тогда задать -1 битами?
PM MAIL WWW ICQ   Вверх
djamshud
Дата 10.12.2009, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


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

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



0xFFFFFFFF


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
azesmcar
Дата 10.12.2009, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Код

int i = 0xFFFFFFFF;


Добавлено через 15 секунд
опередили
PM   Вверх
mes
Дата 10.12.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата
0xFFFFFFFF 


xTr1m, хочу также обратить внимание, что реальное  значение вышеприведенного числа будет зависеть от разрядности переменной.
т.е.в данном случае -1 получится только для знаковых целочисленных переменых разрядностью <= 32. В случае  большей разрядности число будет положительным.

ну и для интереса :
Код

   std::cout << " ~0 == " << ~0 << std::endl
             << " ~1 == " << ~1 << std::endl
             << " ~2 == " << ~2 << std::endl;


smile


--------------------
PM MAIL WWW   Вверх
xTr1m
Дата 10.12.2009, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



чего то я не пойму почему так. знак "-" задается, вроде, 32ым битом. так почему же все должны быть единицами?
Код

int i = 0x1111 1111 1111 1111 1111 1111 1111 1111;

конечно, можно покопаться в теории =)) , но хочется простого объяснения  smile 
PM MAIL WWW ICQ   Вверх
GremlinProg
Дата 10.12.2009, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Цитата(xTr1m @  10.12.2009,  15:41 Найти цитируемый пост)
конечно, можно покопаться в теории =)) , но хочется простого объяснения 

Цитата

В ранних компьютерах целые числа представлялись своим модулем и отдельным знаковым битом. В машинах, основанных на последовательном сложении, бит за битом, по порядку чтения, система размещала знак в младшем разряде. Когда стала возможной параллельная обработка, знак переместился в старший разряд, снова аналогично общепринятой бумажной нотации. Однако использование представления "знак-модуль" было плохой идеей, поскольку для положительных и отрицательных чисел требовались разные схемы. 

Очевидно, что намного лучшее решение обеспечило представление отрицательных чисел в виде дополнения, поскольку одна и та же схема могла выполнять и сложение, и вычитание. Некоторые разработчики выбирали дополнение до единицы, когда -n получалось из n путем простого инвертирования всех бит. Некоторые выбирали дополнение до двойки, когда -n получалось путем инвертирования всех бит и прибавлением единицы. Недостатком первого способа было наличие двух форм нуля (0...0 и 1...1). Это неприятно, особенно, если доступные инструкции сравнения являются неадекватными. 

Например, в компьютерах CDC 6000 имелась инструкция для проверки значения на ноль, корректно распознающая обе формы, но также присутствовала и инструкция, проверяющая только знаковый бит и относящая 1...1 к отрицательным числам, что неоправданно усложняло сравнения. Это пример неадекватной разработки раскрывает ущербность идеи дополнения до единицы. Сегодня во всех компьютерах используется арифметика с дополнением до двойки. Эти разные формы показаны в таблице 1.
...

источник: http://www.citforum.ru/programming/digest/wirth/


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
GoldFinch
Дата 10.12.2009, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(GremlinProg @  10.12.2009,  14:55 Найти цитируемый пост)
Сегодня во всех компьютерах используется арифметика с дополнением до двойки

у вещественных чисел отдельный разряд для знака числа
PM MAIL ICQ   Вверх
GremlinProg
Дата 10.12.2009, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Цитата(GoldFinch @  10.12.2009,  17:19 Найти цитируемый пост)
у вещественных чисел отдельный разряд для знака числа

и при чем тут вещественные числа?


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Alexeis
Дата 10.12.2009, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(GremlinProg @  10.12.2009,  14:22 Найти цитируемый пост)
и при чем тут вещественные числа? 

Ну арифметика может быть целочисленной, а также арифметикой чисел с плавающей точкой. Арифметикой чисел с плавающей точкой также используется в компьютерах. Кроме того еще бывает компьютерная двоично-десятичная арифметика smile . 
  Наверное чисто для справки было сказано, чтобы уточнить.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
GremlinProg
Дата 10.12.2009, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Цитата(Alexeis @  10.12.2009,  17:43 Найти цитируемый пост)
Наверное чисто для справки было сказано, чтобы уточнить.

было бы что уточнять, ведь очевидно, топик ориентирован на целые числа

если уж уточнять, то обращаемся к IEEE 754: http://apdps.org.ua/formatu_dannuh_s_tochkou.html
но я это воспринимаю как  smile 


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
586
Дата 10.12.2009, 15:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код
int number = -0x1;

PM   Вверх
GoldFinch
Дата 10.12.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(GremlinProg @  10.12.2009,  15:22 Найти цитируемый пост)
и при чем тут вещественные числа? 

при том, что кусок цитаты который ты выделил не верен.
в х86 есть вещественные числа, есть BCD, например fbstp преобразует вещественное в BCD со знаковым разрядом
в не-х86 есть все что угодно.

тема про целые числа? замечательно, но это не повод вводить людей в заблуждение копипастя ошибочные утверждения

PM MAIL ICQ   Вверх
GremlinProg
Дата 10.12.2009, 16:27 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Цитата(GoldFinch @  10.12.2009,  18:15 Найти цитируемый пост)
при том, что кусок цитаты который ты выделил не верен.

не понял, в чем он не верен?
Цитата(GoldFinch @  10.12.2009,  18:15 Найти цитируемый пост)
в х86 есть вещественные числа, есть BCD, например fbstp преобразует вещественное в BCD со знаковым разрядомв не-х86 есть все что угодно.

при чем тут x86?
да, конечно в x86 есть вещественные и BCD числа, 
точно так же, как и в большинстве других архитектурах, отличных от x86,

только чем ты недоволен?
чем конкретно я ввожу в заблуждение?


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
maxxant
Дата 13.12.2009, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(mes @  10.12.2009,  13:40 Найти цитируемый пост)
Цитата
0xFFFFFFFF 


Цитата(mes @  10.12.2009,  13:40 Найти цитируемый пост)
xTr1m, хочу также обратить внимание, что реальное  значение вышеприведенного числа будет зависеть от разрядности переменной.
т.е.в данном случае -1 получится только для знаковых целочисленных переменых разрядностью <= 32. В случае  большей разрядности число будет положительным.


и кстати, да, верно также и обратное, по крайней мере на MSVC так было раньше - незнаю как сейчас:

int a = 0xFF;
Видел людей, которые, дебагером проходили по такой строчке и долго-долго в истерике материли компилятор, в ожидании увидеть 255.

на некоторых компиляторах это выражение может давать а=-1. 0xFF компилятор может посчитать как -1 для 8-ми битного числа и добавить единиц при расширении разрядности. То есть, любое число, где последний левый бит равен 1 трактовалось как отрицательное. Для обхода этого всегда впереди писался 0 (да я и до сих пор так пишу) "0x0FF" если необходимо твёрдое положительное значение для знаковых целых типов, на любой платформе. 

PM MAIL   Вверх
Abyx
Дата 13.12.2009, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



maxxant, это говорит только о том, что компилятор считал что у "0xFF" тип signed char
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.0640 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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