gpt4 book ai didi

c# - 我怎样才能更有效地进行int模式检查?

转载 作者:行者123 更新时间:2023-12-03 08:05:43 29 4
gpt4 key购买 nike

这是一些采用int错误代码(scode)并尝试查看它是否适合特定模式的代码。我应该使用模除运算符来执行此操作吗?

const int MASK_SYNTAX_ERR = -2146827000;
if ((MASK_SYNTAX_ERR % scode) == MASK_SYNTAX_ERR)
scriptError.GetSourceLineText(out sourceLine);

背景:我不得不通过观察来推断MASK_SYNTAX_ERR的值。这是我观察到的各种语法错误代码:
// -Int Value (Formatted Value "0x{0:X8}")
-2146827281 (0x800A03EF)
-2146827279 (0x800A03F1)
-2146827280 (0x800A03F0)
-2146827283 (0x800A03ED)
-2146827284 (0x800A03EC)

以下是几个逻辑错误代码供您比较:
-2146823281 (0x800A138F)
-2146823279 (0x800A1391)

(琐事:代码本身正在调用IActiveScriptError.GetSourceLineText,这来自IActiveScriptSite.OnScriptError实现。)

最佳答案

您应该使用按位&运算符,如下所示:
const int MASK_SYNTAX_ERR = -2146827000;
如果(MASK_SYNTAX_ERR&scode!= 0)
scriptError.GetSourceLineText(out sourceLine);

有关正在发生的事情的更多信息。

MASK_SYNTAX_ERR的二进制表示为
1000 0000 0000 1010 0000 0101 0000 1000
对于在相同位置具有1的任何数字,此比较将返回true。以您的第一个语法错误代码为例:

MASK 1000 0000 0000 1010 0000 0101 0000 1000
CODE 1000 0000 0000 1010 0000 0011 1110 1111
& 1000 0000 0000 1010 0000 0001 0000 1000 != 0

所以面具在这里起作用。现在,比较逻辑错误代码:
MASK 1000 0000 0000 1010 0000 0101 0000 1000
CODE 1000 0000 0000 1010 0001 0011 1000 1111
& 1000 0000 0000 1010 0000 0001 0000 1000 != 0

它也可以在这里工作,不应该这样。似乎您推论出的面具可能错了,因为它太复杂了。一起查看语法代码和逻辑代码:
SYNTAX 1000 0000 0000 1010 0000 0011 1110 1111
1000 0000 0000 1010 0000 0011 1111 0001
1000 0000 0000 1010 0000 0011 1111 0000
1000 0000 0000 1010 0000 0011 1110 1101
1000 0000 0000 1010 0000 0011 1110 1100
LOGIC 1000 0000 0000 1010 0001 0011 1000 1111
1000 0000 0000 1010 0001 0011 1001 0001

看起来从左数第13位是逻辑错误和语法错误之间的关键区别。因此,您可以执行以下操作:
const int SYNTAX_MASK = 1 << 12;
if (scode & SYNTAX_MASK != 0)
{
//It's a syntax error
scriptError.GetSourceLine(out sourceLine);
}
else
{
//It's a logic error
}

您可以使用类似的分析来找出用于其他目的的蒙版。很多时候,面具是用来从一个int抓取一点,而不是像你以前那样复杂。代码的0x800A部分可能意味着某种错误,最后一部分给出了有关该错误的信息。您必须自己做一些实验,但是希望这可以使您走上正确的位掩码的轨道。

关于c# - 我怎样才能更有效地进行int模式检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9027875/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com