C# 在c语言中对十进制应用位or运算符#

C# 在c语言中对十进制应用位or运算符#,c#,decimal,bit-manipulation,C#,Decimal,Bit Manipulation,在此代码中,我有如下要求: decimal col; if (condition) { (decimal)col = (decimal)col | ((decimal)System.Math.Pow(2, 0)); } 当编译这段代码时,我得到一个错误 Operator | cannot be applied to operands of type 'decimal' and 'decimal' 谁能解释一下吗?谢谢将其转换为Int64,然后应用|操作符 decimal d1 =

在此代码中,我有如下要求:

decimal col;

if (condition)
{
    (decimal)col = (decimal)col | ((decimal)System.Math.Pow(2, 0)); 
}
当编译这段代码时,我得到一个错误

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

谁能解释一下吗?谢谢

将其转换为
Int64
,然后应用
|
操作符

decimal d1 = ..;
decimal d2 = ..;

var res = (long)d1 | (long)d2;
大数字 正如编译时错误所说,您不能在
十进制
上使用
|
decimal
类型用于
12.34
等数字。如果只使用
12
34
等数字,则最好使用
int
(介于±20亿之间)或
long
(介于±9五百万之间),具体取决于整数的大小

任何幂为零的数字,n0等于
1
,因此您的
Math.Pow(2,0)
可以替换为
1

然后,您的代码可以如下所示,它将被编译

int col;

最后,您可能更喜欢使用三元运算符
?:
来串联您的
if
语句,在您的情况下执行更可读的操作:

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

真是个大数字 使用.Net 4.0或更高版本 如果您需要使用真正大的整数,那么有一个类!(在
System.Numerics.dll
中)

BigInteger类型是一种不可变类型,它表示一个任意大的整数,其值在理论上没有上限或下限

你的声明将变成:

BigInteger col;
和您的按位操作一样正常

使用.Net 2.0或更高版本 查看该项目

IntX是一个用纯C#2.0编写的任意精度整数库,具有快速约O(N*logn)乘法/除法算法实现。它提供了关于整数、比较、位移位等的所有基本算术运算


参考资料:

你到底想要什么?如果使用位运算符,您必须使用一些基于整数的类型。我担心这会导致截断,因为我们为LHSAm填充了一些巨大的值。我不确定您是否可以使用十进制类型的位运算符。所以我建议忽略小数部分,忘了提到这段代码是在循环中运行的;所以数学中的0.Pow(2,0)将在下一次迭代中变为1,以此类推。。。另外,根据我的要求,我需要处理非常大的数字,只有十进制数才行……如果要使用大数字,十进制实际上是一个糟糕的选择。它的射程比double更小,精度更高。如果你能提供更多关于实际值的信息,我们会更有帮助。您是否打算使用十进制值,或者这些只是非常大的整数?我(必须)使用.NET 2.0:(…此外,此代码将在SSIS包(SQL Server 2008)中运行)…所以不确定我是否可以使用新奇的最新名称空间/types@NetTechie使用.Net 2.0选项编辑。但您确定您的数字将大于
9223372036854775807
long.MaxValue
)吗?
BigInteger col;