2016-11-25 16 views
2

Я совершенно новичок в программировании, и я пытался изучить некоторые базовые двоичные файлы, но есть еще одна вещь, которую я не совсем понимаю. Это правила относительно оператора NOT.Как работает двоичный оператор NOT (~)?

позволяет сказать, что я wan't вычислить это: 62&~29

62 = 111110 
29 = 011101 

теперь результат, насколько я понимаю, это должно быть:

100011 = 35 

но результат я получаю от кода 34.

Так что мой вопрос: что происходит с последним значением? Почему он не добавляется к 34?

Надежда кто-то может объяснить мне: D

Иметь хороший день.

ответ

1

~ является нене оператор, это побитовое дополнение оператор.

Он принимает бит-шаблон операнда и преобразует все 0 бит в 1 бит и все 1 бит в 0 бит.

Эффект, который он имеет на числовое значение, будет зависеть от соглашения , которое использует ваша реализация, и количества битов, используемых для представления этого типа.

В вашем конкретном примере, 62&~29 оценивается как 62&(~29), который 111110&(~011101) который 111110&a100010 который 100010 который 34. Здесь я педантичен и использую a, чтобы встать на несколько бит, поэтому количество бит равно ширине вашего типа.

+0

Хорошо, что имеет смысл. Большое спасибо за ваше объяснение :) –

+0

~ 1 на самом деле -2 в дополнении. –

+0

К сожалению. Вы правы. Я удалил предложение. – Bathsheba

0
29 --> 011101 
not29 --> 100010 (turn 1s into 0 and vice-versa) 

62  --> 111110 
not29 --> 100010 
62&not29 --> 100010 (1 if and only if both are 1, otherwise 0) 

Как вы получили 35?

+0

У меня есть 35, потому что я действительно не знал, как работает &, но теперь я вижу, что я ошибся. Я преобразовал 0 в 1, хотя оба они не были или нулями. Спасибо за помощь :) –