![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| xTr1m |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
День добрый. Вопрос вроде простой, но увы не могу найти ответ. хочу написать так
и получить number = -1. Естественно, так не получается, а как можно тогда задать -1 битами? |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
0xFFFFFFFF
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Добавлено через 15 секунд опередили |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
xTr1m, хочу также обратить внимание, что реальное значение вышеприведенного числа будет зависеть от разрядности переменной. т.е.в данном случае -1 получится только для знаковых целочисленных переменых разрядностью <= 32. В случае большей разрядности число будет положительным. ну и для интереса :
|
||||
|
|||||
| xTr1m |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 692 Регистрация: 9.2.2005 Где: Москва Репутация: 1 Всего: 1 |
чего то я не пойму почему так. знак "-" задается, вроде, 32ым битом. так почему же все должны быть единицами?
конечно, можно покопаться в теории =)) , но хочется простого объяснения |
|||
|
||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 3 Всего: 106 |
источник: http://www.citforum.ru/programming/digest/wirth/ -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
||||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 3 Всего: 106 |
и при чем тут вещественные числа? -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Ну арифметика может быть целочисленной, а также арифметикой чисел с плавающей точкой. Арифметикой чисел с плавающей точкой также используется в компьютерах. Кроме того еще бывает компьютерная двоично-десятичная арифметика Наверное чисто для справки было сказано, чтобы уточнить. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 3 Всего: 106 |
было бы что уточнять, ведь очевидно, топик ориентирован на целые числа если уж уточнять, то обращаемся к IEEE 754: http://apdps.org.ua/formatu_dannuh_s_tochkou.html но я это воспринимаю как -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 10 Всего: 146 |
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
при том, что кусок цитаты который ты выделил не верен. в х86 есть вещественные числа, есть BCD, например fbstp преобразует вещественное в BCD со знаковым разрядом в не-х86 есть все что угодно. тема про целые числа? замечательно, но это не повод вводить людей в заблуждение копипастя ошибочные утверждения |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 3 Всего: 106 |
не понял, в чем он не верен?
при чем тут x86? да, конечно в x86 есть вещественные и BCD числа, точно так же, как и в большинстве других архитектурах, отличных от x86, только чем ты недоволен? чем конкретно я ввожу в заблуждение? -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| maxxant |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 8.9.2009 Репутация: нет Всего: 1 |
и кстати, да, верно также и обратное, по крайней мере на MSVC так было раньше - незнаю как сейчас: int a = 0xFF; Видел людей, которые, дебагером проходили по такой строчке и долго-долго в истерике материли компилятор, в ожидании увидеть 255. на некоторых компиляторах это выражение может давать а=-1. 0xFF компилятор может посчитать как -1 для 8-ми битного числа и добавить единиц при расширении разрядности. То есть, любое число, где последний левый бит равен 1 трактовалось как отрицательное. Для обхода этого всегда впереди писался 0 (да я и до сих пор так пишу) "0x0FF" если необходимо твёрдое положительное значение для знаковых целых типов, на любой платформе. |
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
maxxant, это говорит только о том, что компилятор считал что у "0xFF" тип signed char
|
|||
|
||||
| maxxant |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 8.9.2009 Репутация: нет Всего: 1 |
||||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
2 xTr1m :
Присваивать числа в переменные в том виде как ты хочешь это ЗЛО и баги! Поясню: int i = 0xFFFFFFFF Для IA-32(32-bit mode) будет круто и как ты хочешь это действительно будет (-1) Но как только ты с компилишь свою версию под IA-64(64-bit mode), у тебя будет бага, т.к. int на 64-битах может быть 8 байтам! Т.е. младшие 32 бита будут в единичках, а старшие в нулях! Число будет содержать 0x00000000FFFFFFFF ! С этой проблемой род программеский уже сталкивался! Раньше int весил 2 байта, как правило, потому что int задумывался разработчиками компиллеров как универсальный и что не маловажно для программистов, как быстрый тип! Быстрый потому что он максимально приближен к железу, т.е. подзатачивали под железо! А позволю напомнить раньше были в ходу 16 битные процы(среди распространенных занимали самое болльшое кол-во), т.е. регистры были AX, BX. Потом конечно пошел в ходу i386 и тогда разработчики компиллеров стали приравняли int к 4 байтам, ибо EAX, EBX, ECX, etc ! Вот тут-то многие за головы хватались, т.к. присваивали в том виде как ты это хочешь делать! ;) ЗЫ: Почитай по типизации, типы придумали не лохи! Это действительно нужно знать, если хочешь знать что твой алгоритм "бронебойный" |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |