Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 56, средняя оценка - 4.66
Jino_
2 / 2 / 1
Регистрация: 26.06.2010
Сообщений: 37
#1

Порязрядные операции в С - C++

03.07.2010, 13:34. Просмотров 7205. Ответов 5
Метки нет (Все метки)

В чем разница между операторами ! и ~?
Как я понимаю, оба оператора преобразуют единичные биты в нулевые и наоборот, но почему
C++
1
printf("%d", !0)
выводит 1, а
C++
1
printf("%d", ~0)
выводит -1?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2010, 13:34     Порязрядные операции в С
Посмотрите здесь:

Побитовые операции C++
C++ Битовые операции
C++ Операции в С++
Битовые операции C++
Операторы и операции C++
Битовые операции и операции смещения языка С C++
Операции со словом C++
C++ Битовые операции
C++ Записать логические выражения, используя условные операторы, операции отношений и логические операции
Перегрузить операции сравнения комплексных чисел и операции потокового вывода C++
Битовые операции C++
Битовые операции C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
besstiaa
 Аватар для besstiaa
93 / 93 / 7
Регистрация: 04.06.2010
Сообщений: 223
03.07.2010, 14:01     Порязрядные операции в С #2
Цитата Сообщение от Jino_ Посмотреть сообщение
Как я понимаю, оба оператора преобразуют единичные биты в нулевые и наоборот, но почему
Нет. Побитовая инверсия это ~. А ! - логическое отрицание.
Prividenie
74 / 74 / 6
Регистрация: 05.10.2008
Сообщений: 233
03.07.2010, 14:06     Порязрядные операции в С #3
потому что все биты числа - 1. оно и вывело число со знаком - "-1"
Jino_
2 / 2 / 1
Регистрация: 26.06.2010
Сообщений: 37
03.07.2010, 14:08  [ТС]     Порязрядные операции в С #4
Цитата Сообщение от besstiaa Посмотреть сообщение
Нет. Побитовая инверсия это ~. А ! - логическое отрицание.
Точно

C
1
printf("%d", !2)
выводит 0

Цитата Сообщение от Prividenie Посмотреть сообщение
потому что все биты числа - 1. оно и вывело число со знаком - "-1"
да, разобрался уже
besstiaa
 Аватар для besstiaa
93 / 93 / 7
Регистрация: 04.06.2010
Сообщений: 223
03.07.2010, 14:13     Порязрядные операции в С #5
Угу) и !100000 тоже 0 будет
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
833 / 517 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
03.07.2010, 14:17     Порязрядные операции в С #6
~ - битовая операция (инверсия)
! - логическая операция (отрицание)

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

0- 00000000
-0 - 11111111
поэтому ~0=-1

ну а с ! все и так ясно

Добавлено через 42 секунды
на калькуляторе win можно легко проверить
Yandex
Объявления
03.07.2010, 14:17     Порязрядные операции в С
Ответ Создать тему
Опции темы

Текущее время: 02:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru