Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как работает макрос? #define INVALID_SOCKET (SOCKET)(~0) 
V
    Опции темы
Alca
Дата 16.4.2009, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Объясните как работает этот макрос.
Код

#define INVALID_SOCKET  (SOCKET)(~0)


Добавлено через 1 минуту и 6 секунд
Что за (~0)?


--------------------
PM WWW ICQ Skype Jabber   Вверх
Lazin
Дата 16.4.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



оператор ~
PM MAIL Skype GTalk   Вверх
Alca
Дата 16.4.2009, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Цитата

оператор ~

а чего он делает?


--------------------
PM WWW ICQ Skype Jabber   Вверх
J0ker
Дата 16.4.2009, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(Alca @ 16.4.2009,  16:29)
Цитата

оператор ~

а чего он делает?

абалдеть  smile 


--------------------
user posted image
PM MAIL   Вверх
mes
Дата 16.4.2009, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



операция NOT - инвертирует биты, для signed типов ~0 == -1

Это сообщение отредактировал(а) mes - 16.4.2009, 16:40


--------------------
PM MAIL WWW   Вверх
Alca
Дата 16.4.2009, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Цитата

абалдеть 

 smile

Добавлено через 57 секунд
Объясните как работает этот макрос. smile 


--------------------
PM WWW ICQ Skype Jabber   Вверх
J0ker
Дата 16.4.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



(SOCKET)0xFFFFFFFF


--------------------
user posted image
PM MAIL   Вверх
jonie
Дата 17.4.2009, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



J0ker вовсе не так. У меня 64 бит система, например 8)

в общем он (operator~ для чисел обычных) берет биты (они все равны у нас нулю) и делает из них 1-ки. Полученное число приводится к типу SOCKET.

вообщем - читайте дискретку)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Alca
Дата 17.4.2009, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Код

    int x0 = (~0);
    int x1 = (SOCKET)(~0);
    int x2 = (-1);
    int x3 = INVALID_SOCKET;
    int x4 = SOCKET_ERROR;

x0, x1, x2, x3, x4 равны - 1; (VC++ 2008, WinXP 32 bit)

Добавлено через 12 минут
Код

SOCKET x0 = (~0);
SOCKET x1 = (SOCKET)(~0);
SOCKET x2 = (-1);
SOCKET x3 = INVALID_SOCKET;
SOCKET x4 = SOCKET_ERROR;


Цитата

x3    4294967295    unsigned int
x0    4294967295    unsigned int
x1    4294967295    unsigned int
x4    4294967295    unsigned int
x2    4294967295    unsigned int

 smile 

Это сообщение отредактировал(а) Alca - 17.4.2009, 09:36


--------------------
PM WWW ICQ Skype Jabber   Вверх
vinter
Дата 17.4.2009, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Alca, это ты к чему?


--------------------
Мой блог
PM MAIL WWW   Вверх
Alca
Дата 17.4.2009, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Цитата

Alca, это ты к чему?

Мне был интересен конечный результат оператора ~.



--------------------
PM WWW ICQ Skype Jabber   Вверх
inside_pointer
Дата 17.4.2009, 11:21 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 9.3.2008

Репутация: 5
Всего: 12



Код

~0 == ~((unsigned int) 0), (int) (UINT_MAX-0)


то есть она, чтобы обратить биты у знакового, переводит его в беззнаковый, вычитает из максимального беззнакового число, а потом результат переводит в знаковый обратно

Добавлено через 4 минуты и 16 секунд
а SOCKET, если ты под виндой, то там для хендлов чаще используются unsigned long'и
то есть, если это так, то потом знаковый при присваивании будет приводиться к беззнаковому

Это сообщение отредактировал(а) inside_pointer - 17.4.2009, 11:23
PM MAIL   Вверх
Rickert
Дата 17.4.2009, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 0
Всего: 52



~ - оператор инверсии битов. Если взять число, для которого он применён, в двоичной форме, то все 0 меняются на 1, а 1 на 0.
А (SOCKET) - это приведение типов.

Это сообщение отредактировал(а) Rickert - 17.4.2009, 12:00


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
zim22
Дата 17.4.2009, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(inside_pointer @  17.4.2009,  11:21 Найти цитируемый пост)
:~0 == ~((unsigned int) 0), (int) (UINT_MAX-0)

вы этот код сами придумали?



--------------------
PM MAIL   Вверх
Alca
Дата 17.4.2009, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Цитата

~ - оператор инверсии битов. Если взять число, для которого он применён, в двоичной форме, то все 0 меняются на 1, а 1 на 0.

тогда x0 должно быть 1
Код

int x0 = (~0);  //однако x0 = - 1


Это сообщение отредактировал(а) Alca - 17.4.2009, 12:10


--------------------
PM WWW ICQ Skype Jabber   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1168 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.