Модуль: Бинарные сдвиги (C++)


1. Определение знака числа

☰ Теория

Битовые операции

Все числа в памяти компьютера хранятся в двоичном виде, т.е. в виде последовательности 0 и 1. Для хранения чисел в памяти компьютера используется конечное число разрядов. Из-за этого числа в компьютере имеется ограниченный диапазон, а результаты вычислений могут быть неточными. Для хранения целого числа может быть использовано 8, 16, 32 или 64 бита памяти. Каждый дополнительный бит расширяет диапазон возможных значений в 2 раза. 
Операции с положительными и отрицательными числами выполняются в процессоре по одним и тем же алгоритмам.

С помощью поразрядных логических операций можно управлять отдельными битами регистров процессора и внешних устройств. 
 
Операция C++ Назначение
a & b Побитовое И для a и b
a | b Побитовое ИЛИ для a и b
a ^ b Исключающее ИЛИ для a и b
~a Инверсия битов для a
a << b Побитовый сдвиг влево для a на b
a >> b Побитовый сдвиг вправо для a на b



Операция И
С помощью операции «И» можно сбросить (установить в ноль) биты, для которых маска равна 0! 
 
Маска – константа, которая определяет область применения логической операции к битам многоразрядного числа.

D - данные, М - маска

 

Операция ИЛИ
С помощью операции «ИЛИ» можно записать единицу в биты, для которых маска равна 1!

 

Операция исключающее ИЛИ
С помощью операции «исключающее ИЛИ» можно инвертировать биты, для которых маска равна 1!


 

Сдвиг влево
Логический (побитовый) сдвиг влево на 1 разряд увеличивает целое положительное число вдвое.

 

Сдвиг вправо
Логический (побитовый) .сдвиг вправо на 1  делит целое положительное число нацело на 2.


Поскольку при сдвиге вправо на освобождающиеся позиции устанавливается бит знака, знак числа x можно определить, выполнив сдвиг вправо на всю длину переменной.

Пусть дано число x. Определить знак числа.

Добавьте в программу недостающий фрагмент кода.
 
Примеры
Входные данные Выходные данные
1 10 1
2 -10 -1
3 0 0

Вставьте недостающие фрагменты кода
C++
Напишите программу ниже
#include <iostream>
using namespace std;

int getSign(int x) {
	int mask;  
if (x != 0)
		mask = 1;
	else
		mask = 0;           
}

int main()
{
	int x;
	cin >> x;
	cout << getSign(x);
	return 0;
}