Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
aleksand
21 / 9 / 0
Регистрация: 18.06.2011
Сообщений: 185
#1

Неправильно выводится максимальное значение

23.09.2012, 10:09. Просмотров 984. Ответов 5
Метки нет (Все метки)

Мне не понятно, почему мне максимальное значение выводит -1, а минимальное 0, когда максимальное должно быть 4 294 967 295?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int main()
{
    //переменная для типов данных
    unsigned int x;
 
//unsigned int
    for(x=0; ;x--) {
        if(x>0) {
        printf("4). unsigned int max: %d", x);
            x++;
        printf(" min: %d", x);
            break;
        }
    }//-------------------------------------------------
 
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2012, 10:09
Ответы с готовыми решениями:

Неправильно выводится значение максимального элемента строки
Подскажите пожалуйста , из за чего не выводит правильно значение максимального элемента строки ...

Неправильно выводится массив
Вчем проблема , не выводится правильно массив ? #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; ...

Численное решение задачи Коши, результат выводится неправильно
не понимаю в чем проблема задание было такое Построить алгоритмы численного решения задачи...

Корректно выводится максимальное из чисел массива, но некорректно показывается его индекс
Номер максимального по модулю элемента массива #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include...

Не выводится значение переменной
Здравствуйте. Ввожу значение в переменную &quot;number&quot;, но выводится 0. Почему?

5
castaway
Эксперт С++
4929 / 3036 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
23.09.2012, 10:26 #2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

%d подразумевает знаковое целое. Попробуй использовать %u или %ul
2
aleksand
21 / 9 / 0
Регистрация: 18.06.2011
Сообщений: 185
23.09.2012, 10:46  [ТС] #3
Цитата Сообщение от lazybiz Посмотреть сообщение
%d подразумевает знаковое целое. Попробуй использовать %u или %ul
Помогло, но всё же не понятно, почему у меня выводилось -1, когда минимальное значение типа unsigned int 0. Вот это мне действительно не понятно. Объясните почему это так
0
castaway
Эксперт С++
4929 / 3036 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
23.09.2012, 10:49 #4
Там происходит неявное преобразование в тип signed int, получается примерно так: unsigned int a = 0; a--; (a == 4 294 967 295) int b = a; (b == -1)
0
aleksand
21 / 9 / 0
Регистрация: 18.06.2011
Сообщений: 185
23.09.2012, 10:56  [ТС] #5
Цитата Сообщение от lazybiz Посмотреть сообщение
Там происходит неявное преобразование в тип signed int, получается примерно так: unsigned int a = 0; a--; (a == 4 294 967 295) int b = a; (b == -1)
Вот с этого момента поподробнее: int b = a; (b == -1) пожалуйста. Я ведь просто к максимальному значению типа unsigned int прибавил + 1, соответственно переменная принимает самое минимальное значение. Если к примеру использовать вместо unsigned int - unsigned char, то мой код работает превосходно и с %d
0
castaway
Эксперт С++
4929 / 3036 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
23.09.2012, 11:02 #6
Тебе следует почитать о представлении данных в памяти.
Если представить число 0xffffffff как 32-битное знаковое (тип int), то получится -1.
если представить как 32-битное беззнаковое (тип unsigned int), то будет 4 294 967 295.
0
23.09.2012, 11:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2012, 11:02

Цикл не останавливается, значение функции вычисляется неправильно
Цикл не останавливается и программа не правильно вычисляет значения функции , посмотрите пожалуйста...

Почему записывает неправильно значение хотя показывает правильное
int newstrcpy(char *s, char *t, int n) { int i = sizeof s; // почему здесь записывает 8...

Найти максимальное значение из введенных
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include&lt;iostream&gt; #include&lt;locale.h&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru