using System;
class BitwiseCalculator
{
static void Main()
{
[Link]("Bitwise Calculator");
[Link]("Enter the first integer: ");
int num1 = [Link]([Link]());
[Link]("Enter the second integer: ");
int num2 = [Link]([Link]());
[Link]("\nBitwise Operations:");
[Link]("1. & (AND)");
[Link]("2. | (OR)");
[Link]("3. ^ (XOR)");
[Link]("4. ~ (NOT)");
[Link]("Enter the symbol of the bitwise operation: ");
int choice = [Link]([Link]());
switch (select)
{
case "&":
break;
case "|":
break;
case "^":
break;
case "~":
break;
BitwiseOperation operation;
switch (choice)
{
case 1:
operation = new BitwiseAND(num1, num2);
break;
case 2:
operation = new BitwiseOR(num1, num2);
break;
case 3:
operation = new BitwiseXOR(num1, num2);
break;
case 4:
operation = new BitwiseNOT(num1);
break;
default:
[Link]("Invalid choice");
return;
}
[Link]($"Result of {[Link]()}:
{[Link]()}");
}
}
abstract class BitwiseOperation
{
protected readonly int num1;
protected readonly int num2;
public BitwiseOperation(int num1, int num2 = 0)
{
this.num1 = num1;
this.num2 = num2;
}
public abstract string GetOperationName();
public abstract int GetResult();
}
class BitwiseAND : BitwiseOperation
{
public BitwiseAND(int num1, int num2) : base(num1, num2) { }
public override string GetOperationName()
{
return "AND";
}
public override int GetResult()
{
return num1 & num2;
}
}
class BitwiseOR : BitwiseOperation
{
public BitwiseOR(int num1, int num2) : base(num1, num2) { }
public override string GetOperationName()
{
return "OR";
}
public override int GetResult()
{
return num1 | num2;
}
}
class BitwiseXOR : BitwiseOperation
{
public BitwiseXOR(int num1, int num2) : base(num1, num2) { }
public override string GetOperationName()
{
return "XOR";
}
public override int GetResult()
{
return num1 ^ num2;
}
}
class BitwiseNOT : BitwiseOperation
{
public BitwiseNOT(int num1) : base(num1) { }
public override string GetOperationName()
{
return "NOT";
}
public override int GetResult()
{
return ~num1;
}
}