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;