![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 7 Всего: 50 |
Объясните как работает этот макрос.
Добавлено через 1 минуту и 6 секунд Что за (~0)? |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
оператор ~
|
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 7 Всего: 50 |
а чего он делает? |
|||
|
||||
J0ker |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
абалдеть ![]() |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
операция NOT - инвертирует биты, для signed типов ~0 == -1
Это сообщение отредактировал(а) mes - 16.4.2009, 16:40 |
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 7 Всего: 50 |
![]() Добавлено через 57 секунд Объясните как работает этот макрос. ![]() |
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
(SOCKET)0xFFFFFFFF
|
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
J0ker вовсе не так. У меня 64 бит система, например 8)
в общем он (operator~ для чисел обычных) берет биты (они все равны у нас нулю) и делает из них 1-ки. Полученное число приводится к типу SOCKET. вообщем - читайте дискретку) -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
Alca |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 7 Всего: 50 |
x0, x1, x2, x3, x4 равны - 1; (VC++ 2008, WinXP 32 bit) Добавлено через 12 минут
![]() Это сообщение отредактировал(а) Alca - 17.4.2009, 09:36 |
||||||
|
|||||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
Alca, это ты к чему?
|
|||
|
||||
Alca |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 7 Всего: 50 |
Мне был интересен конечный результат оператора ~. |
|||
|
||||
inside_pointer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
то есть она, чтобы обратить биты у знакового, переводит его в беззнаковый, вычитает из максимального беззнакового число, а потом результат переводит в знаковый обратно Добавлено через 4 минуты и 16 секунд а SOCKET, если ты под виндой, то там для хендлов чаще используются unsigned long'и то есть, если это так, то потом знаковый при присваивании будет приводиться к беззнаковому Это сообщение отредактировал(а) inside_pointer - 17.4.2009, 11:23 |
|||
|
||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
~ - оператор инверсии битов. Если взять число, для которого он применён, в двоичной форме, то все 0 меняются на 1, а 1 на 0.
А (SOCKET) - это приведение типов. Это сообщение отредактировал(а) Rickert - 17.4.2009, 12:00 -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
вы этот код сами придумали? |
|||
|
||||
Alca |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 7 Всего: 50 |
тогда x0 должно быть 1
Это сообщение отредактировал(а) Alca - 17.4.2009, 12:10 |
||||
|
|||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
почему? Добавлено через 50 секунд я знаю чему оно должно быть равно, просто мне интересен ход мыслей, который мог привести к этому выводу )) |
|||
|
||||
Alca |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 7 Всего: 50 |
Типа так должно быть (в двоичной)? 0000 -> 1111 Добавлено через 1 минуту и 40 секунд http://ru.wikipedia.org/wiki/Битовые_операции Добавлено через 2 минуты и 6 секунд
Добавлено через 4 минуты
Чему? |
||||||
|
|||||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
Alca, а вы так попробуйте
|
|||
|
||||
Alca |
|
||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 7 Всего: 50 |
|
||||||||||
|
|||||||||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
всё правильно. так и должно быть. поверьте, компилятор вас не дурит ![]()
Это сообщение отредактировал(а) zim22 - 17.4.2009, 12:45 |
|||
|
||||
inside_pointer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
там неявные приведения типов, и он не инверсирует биты, а проводит вот такую операцию вычитания из большего значения это последовательность того, как происходит операция ![]() похожее происходит при операции одноместного минуса Это сообщение отредактировал(а) inside_pointer - 17.4.2009, 15:32 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
inside_pointer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
||||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
какой флуд можно развети на тему элементарного оператора, однако...
|
|||
|
||||
inside_pointer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
ну, если у майкрософт учишься - конечно
они вон и сертификатами торгуют, программы два притопа три прихлопа пропихиваются, как нечто грандиозное |
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
правда??????????? а я-то наивный думал, что для численных констант это compile time инвертирование, а для переменных - ассемблерная операция not inside_pointer, ты хоть фантазируй более правдоподобно, чтоль... |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
||||
|
||||
inside_pointer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
а что это меняет ? |
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
уменьшает расход электоэнергии причем на обоих этапах - компиляции и выполнения ![]() |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
в который раз удивляюсь как программисты могут обсуждать такие тривиальные вещи
представление данных и работа с ними - это же азы информатики, все программисты должны это знать %) |
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
где вы тут программистов-то увидели? тут только ламеры да джедаи ![]() |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
||||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
потому, что GoldFinch - джедай ![]() |
|||
|
||||
inside_pointer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
вот именно, потому и знать это не надо, так как это не стандарт, компиляторов-то много, а стандарт один |
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
вы для начала откомпилируйте и посмотрите в стандарте дано описание поведения этого оператора, но на самом деле такого бреда естественно не происходит - никакого вычитания там нет - практически у любого процессора есть операция not - это одна из основополагающих операций, а приведение типов - это вообще функция компилятора - в выполняемом коде никаких приведений типов нет, кроме как в/из FP |
|||
|
||||
inside_pointer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 9.3.2008 Репутация: 5 Всего: 12 |
а, ну ясно тогда |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
||||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
в C++ нет типов "byte" "word" "doubleword" и "quadword" операции процессора не имеют никакого отношения к типам C++ приспособление операций процессора для реализации расширения/обрезания типов С++ согласно стандарту - функция компилятора подгонка некоторых операций процессора под распространенный стандарт - не более чем фича конкретного процессора |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
J0ker, а че ты тогда который пост пишешь про "ассемблерную операцию not"
|
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
а почему я не должен про нее писать? ![]() |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну эта операция совсем не ассемблерная, она относится к двоичной математике, как и операции and, or и другие. и потому выражение несет смысл того, что процессор наверняка имеет готовую реализацию для двоичной логики, а не то, что Сpp-ная ~ обязательно заменяется ассемблерной not. и была сказана в противовес утверждению inside_pointera, о том что компилятор должен реализовывать ее посредством вышеупомянутых преобразований с вычитанием.. С какого перепугу человек, знакомый с двоичной математикой, должен быть знаком с ассемблером ?! Это сообщение отредактировал(а) mes - 19.4.2009, 00:13 |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
эта тема не умрет никогда!
|
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |