У меня возник вопрос о преобразовании базы с 10 в 2 без использования разделов (/) и модулей (%), поэтому я придумал решение с использованием побитового И (&) и справа сдвига (>>).Десятичная дивизия по левому смену
Итак, я начинаю понимать, что именно делают эти два оператора, но все же для некоторых вопросов я не мог найти ответ или понять логику.
Если я правильно понимаю, что деление работает согласно значению места в десятичной и двоичной единицах. когда мы делим число на 10 или 2, мы сдвигаем значение места на одно место вправо в обоих, что приведет к делению на 10 в десятичной и по двум в двоичном.
Х = 120 (в базе десяти), если Х >> 1 мы будем иметь X = 12 (деление на 10)
Y = 1000 (в базе двух), если Y >> 1 мы будет иметь X = 100 (деление на 2)
, но когда я использую этот кусок кода:
#include<iostream>
using namespace std ;
int main()
{
int a,b=1;
cout <<"enter an integer"<<endl;
cin>> a;
cout<<(a & b)<<endl;
a=a>>1;
cout<<a;
cout<<endl;
system("pause");
return 0 ;
}
я comfused причину в моем сознании это было как этот
а = 120 (в базе десяти), если Х >> 1 мы будем иметь Х = 12 (деление на 10)
но результат был этот
а = 120 (в базе десяти), если X >> 1 имеем X = 60 (деление на 2 !!)
Я не понимаю, два основных пункта о результате:
сначала: если этот оператор (>>) просто сдвинет значение места цифр в коде и не изменит базу номера (10), он должен произвести другой результат (12), чем мы можем видеть в результате кода (который это 60). Почему мы можем видеть этот результат (60), но не 12?
второй: если он выполняет двоичный сдвиг влево (что мне кажется это для меня), он меняет десятичную на двоичную сначала с помощью IDE или нет?
и о побитовом И если это логично ворота (который, кажется, что это):
1.How мы можем поставить другое значение, кроме 0 и 1 и стал есть ответ?
побитовое И 2. Согласно правилам
Y & 1 = Y
, то это должно быть 120, а результат кода 1. что такое объяснение этому?
3.может ли это сгенерировать напоминание (согласно которым выполняются математические операции и логика)?
Сдвиги называются «побитовыми», потому что они работают с битами, то есть в базе 2. Числа в C++ обычно хранятся в двоичном формате; они преобразуются в десятичные только для ввода и вывода. –
'int' содержит значение. значения не имеют базы. Поэтому 'a' не находится ни в одной базе. '>>' в C++ всегда является базой 2. Ergo, результирующее значение ... –