C++ - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > Разное / Other > Курилка / Yak floor

Курилка / Yak floor
Свободное общение, рассуждения на любые интересные вам темы.

Ответ
Опции темы
Непрочитано 12.10.2013, 20:25   #1
Изгнанные

Автор темы (Топик Стартер) C++

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

если первые 2 случая более менее поддаются логике, то что происходит в последнем ?
qweqwe1 вне форума Ответить с цитированием
Непрочитано 12.10.2013, 20:47   #2
Олдфаг

По умолчанию Re: C++

Цитата:
Сообщение от oSg Посмотреть сообщение
Делать было нечего, забавы ради решил немного поковыряться...

если первые 2 случая более менее поддаются логике, то что происходит в последнем ?
вот это ты психанул.
Smiler вне форума Ответить с цитированием
Непрочитано 12.10.2013, 21:19   #3
Аватар для Zeratyl
Гвардии штабс-капитан N7 ═════ ★ ★ ★ ★ ★ ═════

По умолчанию Re: C++

Зачем вы пишете signed? По умолчанию все знаковое.
В последнем случае вы получаете размерность типа вашей переменной, как и раньше, даром что тип вы объявили тоже знаковый - для беззнака умножайте предел на два.

Добавлено через 1 минуту
Все прекрасно поддается логике. Даже ваше !test2 - это булева переменная. А в Си, все что не 0, то True, даже отрицательные значения. 0, в свою очередь, False.

Последний раз редактировалось Zeratyl; 12.10.2013 в 21:24. Причина: Добавлено сообщение
Zeratyl вне форума Отправить сообщение для Zeratyl с помощью ICQ Отправить сообщение для Zeratyl с помощью AIM Отправить сообщение для Zeratyl с помощью MSN Отправить сообщение для Zeratyl с помощью Yahoo Отправить сообщение для Zeratyl с помощью Skype™ Ответить с цитированием
Непрочитано 12.10.2013, 21:26   #4
Изгнанные

Автор темы (Топик Стартер) Re: C++

Цитата:
Сообщение от Zeratyl Посмотреть сообщение
Зачем вы пишете signed? По умолчанию все знаковое.
В последнем случае вы получаете размерность типа вашей переменной, как и раньше, даром что тип вы объявили тоже знаковый - для беззнака умножайте предел на два.

Добавлено через 1 минуту
Все прекрасно поддается логике. Даже ваше !test2 - это булева переменная. А в Си, все что не 0, то True, даже отрицательные значения. 0, в свою очередь, False.
а вы попробуйте скомпилить следующий код, без signed
Код:
signed void test3() {
	return -10;
}
ну или, например, объявить переменную void test2 (подчеркиваю, что не void*)
далее - (un)signed void и (un)signed bool это обыкновенные инты (с высокой вероятностью)
и напоследок: вопрос был про третий случай, а именно - что происходит с sizeof
qweqwe1 вне форума Ответить с цитированием
Непрочитано 12.10.2013, 21:31   #5
Аватар для Zeratyl
Гвардии штабс-капитан N7 ═════ ★ ★ ★ ★ ★ ═════

По умолчанию Re: C++

Цитата:
Сообщение от oSg Посмотреть сообщение
вопрос был про третий случай
Цитата:
Сообщение от oSg Посмотреть сообщение
что происходит в последнем ?


Да ради бога, только вы просто используете приведение типов. Могли бы просто писать int и не делать комедию.
Zeratyl вне форума Отправить сообщение для Zeratyl с помощью ICQ Отправить сообщение для Zeratyl с помощью AIM Отправить сообщение для Zeratyl с помощью MSN Отправить сообщение для Zeratyl с помощью Yahoo Отправить сообщение для Zeratyl с помощью Skype™ Ответить с цитированием
Непрочитано 12.10.2013, 21:38   #6
Изгнанные

Автор темы (Топик Стартер) Re: C++

Цитата:
Сообщение от Zeratyl Посмотреть сообщение


Да ради бога, только вы просто используете приведение типов. Могли бы просто писать int и не делать комедию.
прошу, объясните мне результат sizeof(test5) в обоих случаях
а то у меня возникают большие сомнения про int и привидение типов (применительно к test5)
qweqwe1 вне форума Ответить с цитированием
Непрочитано 12.10.2013, 21:47   #7
Аватар для JavaMan

По умолчанию Re: C++

oSg, советую проштудировать спецификацию языка, обычно там можно получить ответ на любой вопрос.
JavaMan вне форума Ответить с цитированием
Непрочитано 12.10.2013, 21:48   #8
Аватар для Zeratyl
Гвардии штабс-капитан N7 ═════ ★ ★ ★ ★ ★ ═════

По умолчанию Re: C++

А вы напишите sizeof(__int64), что он скажет?
Zeratyl вне форума Отправить сообщение для Zeratyl с помощью ICQ Отправить сообщение для Zeratyl с помощью AIM Отправить сообщение для Zeratyl с помощью MSN Отправить сообщение для Zeratyl с помощью Yahoo Отправить сообщение для Zeratyl с помощью Skype™ Ответить с цитированием
Непрочитано 12.10.2013, 21:49   #9
Изгнанные

Автор темы (Топик Стартер) Re: C++

Цитата:
Сообщение от Zeratyl Посмотреть сообщение
А вы напишите sizeof(__int64), что он скажет?
явно не 10563636

на самом деле, непонятно следующее:
Код:
__int64 test5 = 0;
printf("%d \t %d\r\n", *(&test5+1), sizeof(test5));
Код:
; 18   : 	__int64 test5 = 0;
; 19   : 	printf("%d \t %d\r\n", *(&test5+1), sizeof(test5));

	push	8
	push	DWORD PTR _test5$[ebp+12]
	push	DWORD PTR _test5$[ebp+8]
	push	OFFSET ??_C@_09JAJOBGPP@?$CFd?5?7?5?$CFd?$AN?6?$AA@
	call	esi
в esi у нас, собственно, printf
херня с символами - формат
а вот что за последних два push'a...
qweqwe1 вне форума Ответить с цитированием
Непрочитано 12.10.2013, 21:56   #10
Олдфаг

По умолчанию Re: C++

проблема у вас не в sizeof а в том что вы передаете в printf переменную типа int64 а спецификатор используете %d

измените его на %I64d
Smiler вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 20:22. Часовой пояс GMT +3.

Вверх