Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Applying bitwise or operator to decimal in c#

In this code, I have a requirement like below:

decimal col;

if (condition)
{
    (decimal)col = (decimal)col | ((decimal)System.Math.Pow(2, 0)); 
}

When this code is compiled, I get an error saying

Operator | cannot be applied to operands of type 'decimal' and 'decimal'

Can anyone explain, please? Thanks

like image 454
sanar Avatar asked Sep 06 '25 17:09

sanar


1 Answers

Big numbers

As the compile-time-error says, you cannot use | on decimal. The decimal type is for numbers like 12.34. If you're only using numbers like 12 or 34 then you may be better off using int (between ±2 billion) or long (between ±9 quintillion) depending how big your integer is.

Any number raised to the power zero, n0 equals 1 so your Math.Pow(2, 0) can be replaced by 1.

Your code could then look like this, which will compile.

int col;

and

if (condition)
    col = col | 1;

Finally, you may prefer to use the ternary operator ?: to in-line your if statement, do whichever is more readable in your situation:

col = condition ? (col | 1) : col;

Really big numbers

Using .Net 4.0 or above

If you need to use REALLY BIG integers, there is a class for that! System.Numerics.BigInteger (in System.Numerics.dll).

The BigInteger type is an immutable type that represents an arbitrarily large integer whose value in theory has no upper or lower bounds.

Your declaration would then become:

BigInteger col;

And your bitwise operations as normal.

Using .Net 2.0 or above

Check out the project IntX

IntX is an arbitrary precision integers library written in pure C# 2.0 with fast - about O(N * log N) - multiplication/division algorithms implementation. It provides all the basic arithmetic operations on integers, comparing, bitwise shifting etc.

Reference: Big integers in C#

like image 87
dav_i Avatar answered Sep 11 '25 06:09

dav_i