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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 56, средняя оценка - 4.66
Jino_
2 / 2 / 1
Регистрация: 26.06.2010
Сообщений: 37
03.07.2010, 13:34     Порязрядные операции в С #1
В чем разница между операторами ! и ~?
Как я понимаю, оба оператора преобразуют единичные биты в нулевые и наоборот, но почему
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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
832 / 516 / 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     Порязрядные операции в С
Ответ Создать тему
Опции темы

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