close

Вход

Забыли?

вход по аккаунту

?

BinaryOperations

код для вставки
#include "BinaryOperations.h"
ulong Inc(ulong a, ulong b){
if (a == 0)
return b;
if (b == 0)
return a;
ulong _result = 0;
ushort _nextbit = 0;
ulong _Size = Dec(ULONG_SIZE);
ulong l = 1 << _Size;
do{
_result >>= 1;
_result |= (a ^ b ^ _nextbit) << _Size;
_nextbit = (a & b) | (b & _nextbit) | (a & _nextbit);
a >>= 1;
b >>= 1;
l >>= 1;
}while(l);
return _result;
}
ulong Dec(ulong a, ulong b){
// Вычитаем из a b
a = Inc(~a);
a = Inc(a, b);
return Inc(~a);
}
ulong Inc(ulong a){
if(a & 1)
a = Inc(a, 1);
else
a |= 1;
return a;
}
ulong Dec(ulong a){
if(a & 1)
a &= ~1;
else
a = Dec(a, 1);
return a;
}
ushort GetBit(ulong a, int n){
ulong x = 0;
x = 1 << n;
return a & x;
}
ulong SetBit(ulong a, int n, ushort Bit){
ulong x = 0;
x = 1 << n;
if (Bit)
return a | x;
else
return a & ~x;
}
void ShowNum(ulong a){
ulong x = 0;
int i = 1;
x = 1 << Dec(ULONG_SIZE);
do{
putchar(Inc(a & x, '0'));
// оформить остаток от деления
x >>= 1;
Inc(i);
}while (x);
}
short CheckTheParity(ulong a){
// Возвращает 1 если число четное и 0 в обратном случае
return !(a & 1);
}
ulong Mult(ulong a, ulong b){
ulong _result = 0;
do{
if (b & 1)
_result = Inc(_result, a);
a <<= 1;
b >>= 1;
}while(b);
if (_result && a != 1 && b != 1)
printf("Error input! Numbers - too long\n");
return _result;
}
ulong Div(ulong a, ulong b){
// Деление нацело
if (a == 0)
return 0;
if (b == 0)
return SetBit(~0, Dec(ULONG_SIZE), 0); // Возвратим самое большое число
if (b == 1)
return a;
short i = Dec(sizeof(ulong));
ulong _result = 0;
do{
}while(!Dec(Compare(a, b)));
}
short Compare(ulong a, ulong b){
// return 1 if a > b
// -1 if a < b
// 0 if a == b
long _result = 0;
do{
_result = (a & 1) ^ (b & 1);
if (_result){
// То есть биты разные
_result = a & 1;
if (_result)
return 1;
return -1;
}
a >>= 1;
b >>= 1;
}while(a != 0 || b != 0);
return 0;
}
Автор
derElektroBesen
Документ
Категория
Информатика
Просмотров
76
Размер файла
2 Кб
Теги
binaryoperations
1/--страниц
Пожаловаться на содержимое документа