Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何才能写得更好?_C#_Math_Casting - Fatal编程技术网

C# 如何才能写得更好?

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类型之间是不明确的,所

我正在创建一个类来读取一种类型的文件,该文件被划分为大小为4096字节或0x1000十六进制的块。第一个块是0xC000,所以我要从结果中减去0xC

无论如何,问题是当我尝试时:

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。