C# 如何才能写得更好?
我正在创建一个类来读取一种类型的文件,该文件被划分为大小为4096字节或0x1000十六进制的块。第一个块是0xC000,所以我要从结果中减去0xC 无论如何,问题是当我尝试时:C# 如何才能写得更好?,c#,math,casting,C#,Math,Casting,我正在创建一个类来读取一种类型的文件,该文件被划分为大小为4096字节或0x1000十六进制的块。第一个块是0xC000,所以我要从结果中减去0xC 无论如何,问题是当我尝试时: private int OffsetToBlockNumber(int offset) { return (int)(Math.Floor((double)(offset / 0x1000)) - (double)0xc); } 它说这个调用在decimal和double类型之间是不明确的,所
private int OffsetToBlockNumber(int offset) {
return (int)(Math.Floor((double)(offset / 0x1000)) - (double)0xc);
}
它说这个调用在decimal和double类型之间是不明确的,所以我将它们转换成double,然后将结果转换成int。这样做似乎很愚蠢,所以我希望有人能找到更好的方法。右移12等于除以
0x1000
。您的原始表达式可以表示为:
Math.Floor(offset / 0x1000) - 0xC
虽然我想知道你是否真的想在除法/移位之前减去
0xc
?右移12等于除以0x1000
。您的原始表达式可以表示为:
Math.Floor(offset / 0x1000) - 0xC
虽然我想知道你是否真的想在除法/移位之前减去
0xc
?记住处理器和快速整数数学工作原理的说明;)+1.很高兴看到现代世界中有人仍然知道如何编程。记忆处理器和快速整数数学工作原理的概述;)+1.很高兴看到现代世界的人仍然知道如何编程。使用整数除法,offset/0x1000
已经截断而不必弄乱Floor()和double。使用整数除法,offset/0x1000
已经截断而不必弄乱Floor()和double。