Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > MinGW32 + W7 64 + unsigned int


Автор: NYX 19.5.2011, 00:57
Очень долго не мог понять что работает не так, перерыл ВСЕ! Дебагер повесился, клава стерлась... как следствие вмятина на боковине системника!

unsigned int Z = -5;
    printf("%i", Z);

Выводит -5. Как?

Компилятор MinGW32, среда Виндус 7 em64t (Intel).

Автор: NYX 19.5.2011, 01:21
причем __int16 заворачивается а __int32 нет, несмотря на указание unsigned число всетаки становится signed. А то я думаю у меня цокл виснет без особых на то причин...
Как такое может происходить, братцы?

Добавлено через 4 минуты и 8 секунд
к слову (небылица абсолютная) число не достигает указанного значения в 4294967295
то есть:
for (unsigned int X = 0; X < 4294967295; X++)
выполняется вечно!

Автор: volatile 19.5.2011, 02:53
Цитата(NYX @  19.5.2011,  00:57 Найти цитируемый пост)
unsigned int Z = -5;
    printf("%i", Z);

Выводит -5. Как?

printf'у по барабану, сигнед вы выводите или ансигнед. Он реагирует только на форматную строку.
printf("%u", Z); выведет без знака, (даже если Z переделаете потом в сигнед smile )

Цитата(NYX @  19.5.2011,  01:21 Найти цитируемый пост)
for (unsigned int X = 0; X < 4294967295; X++)
выполняется вечно! 

Не может быть. Просто, скорей всего, очень долго. Соберите проект с оптимизацией, или запаситесь терпением.
Если все равно нет, приведите весь код.



Автор: NYX 19.5.2011, 03:28
про %i знаю... Я сам в шоке от случившегося! unsigned не фурычит! После переустановки MinGW все норм. В чем было дело я так и не понял и даже предположить не в силах. Однако бывает же. Два дня не мог вкурить почему у меня цикл виснет, он был расчитан на 3 с лишним ГБ данных. К циклу обращался редко, в пределенной ситуации и был написан он и забыт... а когда дело дошло до дела... вот такая фихня. Черти в компьютере завелись наверно.

Код был именно таким:
for (unsigned int X = 0; X < 4294967295; X++)
Только вместо X был Index который выступал в роли индекса к массиву с НЕКИМ архивом, который читался чем то вроди такого
ReadBrick(DataCollect::LastBrick[Index]);

Собстно функция делала простенькие вычисления, которые помещались в одну строку вместе с return без дополнительных вызовов. Параллельно проивзодились
еще кое какие вычисления но это уже не суть... я в итоге повесил на цокл printf и выкурив 2,5 сигареты просмотрел ход событий, переменная не доходит до нужной
кандиции... чудеса какие то... скрина нет жалко, затер буффер Копипастом.

Автор: volatile 19.5.2011, 06:33
Цитата(NYX @  19.5.2011,  03:28 Найти цитируемый пост)
про %i знаю... 
Что-то вы темните, брат...
Зачем в таком случае вмятину на системнике делать?  smile 
Цитата(NYX @  19.5.2011,  00:57 Найти цитируемый пост)
Очень долго не мог понять что работает не так, перерыл ВСЕ! Дебагер повесился, клава стерлась... как следствие вмятина на боковине системника!
unsigned int Z = -5;
    printf("%i", Z);
Выводит -5. Как?


Цитата(NYX @  19.5.2011,  03:28 Найти цитируемый пост)
Два дня не мог вкурить почему
И через 5 минут обращения на форум, вы вдруг уже не можете воспроизвести бага.
Цитата(NYX @  19.5.2011,  03:28 Найти цитируемый пост)
скрина нет жалко, затер буффер Копипастом.

smile

Автор: NYX 19.5.2011, 11:58
то что в printf %i знаковое скалярное а %u беззнаковое а %f и %16.16f ... я просто для наглядности написал, совсем забыв про %u, но тем не менее у себя на сырце я отследил эту гадость. А вмятина конечно же образная, уж больно корпус у меня красивый, жалко его насиловать физической расправой smile

Автор: Alca 19.5.2011, 13:12
Код

size_t Z = -5;
printf("%zu", Z);  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)