![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| КапельКа |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 2.10.2006 Репутация: нет Всего: нет |
Имеется простой цикл:
Если объявляю переменные как unsigned int, то почему-то после прохождения всего цикла, т.е .когда j=0, цикл не прекращается, а j становится равным максимальному значению(проверяла дебаггером). Результат получается такой: 11100152834359738363435973836343597383634359738363435973836343597383634359738363435973836343597383634359738361034359738363435973836343597383634359738363435973836343597383634359738363435973836343597383634359738363435973836343597383... ну и так далее.... Во всем этом наборе цифр правильные тока первые 6 цифр :111001 А если объявить переменные как int, то все нормально, цикл останавливается как только j становиться раным 0. Как можно все это объяснить? Компилятор: VC++6.0 |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| КапельКа |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 2.10.2006 Репутация: нет Всего: нет |
Я понимаю что unsigned не может быть меньше 0, я хотела бы понять почему переменая j становиться равной максимальному значению типа unsigned?
Это сообщение отредактировал(а) КапельКа - 9.1.2007, 12:53 |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
для этого нужно понимать как числа выглядят в двоичном формате и как выглядят операции над ними. читать тут -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| КапельКа |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 2.10.2006 Репутация: нет Всего: нет |
т.е. получается как бы движение по кругу диапазона что ли?
от j до 0. далее если диапазон продолжается, то идет дальше вниз если нет то начинаеся сначала? Добавлено @ 13:10 _hunter, я в курсе как они выглядят. просто не думала что происходит движение по кругу... Добавлено @ 13:12 Тогда еще один вопрос: как можно изменить условие for'a что бы все таки использовать unsigned? |
|||
|
||||
| Dancer |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 29.4.2005 Где: Nizhniy Novgorod Репутация: нет Всего: 37 |
КапельКа, посмотри в сторону бинарной арифметики, думаю будет понятно.
если же нет, то попробую на пальцах. unsigned int диапазон от 0 до 0xFFFFh int диапазон от-0xFFh до (0xFFh -1) если мы в получаем ноль для unsigned int то есть в двоичном виде это будет 32 нуля. теперь сделай плиз вычитание из этого числа единицы (причём ты не имеешь никакого права добавлять разряды, из у тебя так и должно будет остаться 32) (j--) ты получишь максимальное число для unsigned int. если ты будешь использовать int то получишь -1 (это вытекает из двоичного представления нуля для no unsigned типов) -------------------- У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
j>=0 && j <= k
|
|||
|
||||
| КапельКа |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 2.10.2006 Репутация: нет Всего: нет |
Огромное всем спасибо. Теперь все стало ясно.
|
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |