今天上班时我与我的一位同事进行了一次有趣的讨论.当他遇到以下情况时,他感到很惊讶:
assert(-1 % 10 == -1) //Expecting 9
Run Code Online (Sandbox Code Playgroud)
因此,当他来问我这件事,我告诉他,"好了,这是有道理的.当你把-1 10,你跟-1剩余得到0.然而,他的论点是,模运算应该秉承"总是积极的"模型.我做了一点研究,发现他所指的模数看起来像这样:
设q是a和n的整数商.设r为余数.然后:
a = n*q + r
然而,我使用的定义似乎是模数的Knuth版本,它是:
设q是除以n的底数.设r为余数.然后:
r = a - n*q
所以,我的问题是为什么它最终在FORTRAN标准(以及随后的C标准)中使模数运算符截断为0?把它称为"模数"而不是"余数"似乎是一种误称(在数学中,答案应该是9).这与硬件如何进行划分有关吗?
以供参考:
TLDR; 硬件是模数运算符向0截断的原因吗?
我在我正在使用的其中一个应用程序中使用WPF Toolkit Datagrid.我想要的是将列宽和displayindex存储为用户首选项.我已经获得了list displayindex但是为了调整大小,我在datagrid上找不到任何事件,这会在列大小更改后触发.我已经尝试了"SizeChanged"事件,我猜这个事件只是在它最初计算大小时被触发,而且对于整个数据网格也是如此,而不是针对各个列.
任何替代解决方案或任何人都知道该事件?
今天我正在与我的编译器发生另一项国内事务时,这个问题突然出现在我的脑海中.尽管我的粉红色(由于我在工作时所做的所有分号按压),我在一个if声明之前设法错过了一个.显然,这导致编译错误:
错误C2143:语法错误:缺少';' 在"如果"之前
所以我在想"好哎呀,你为什么不能告诉我缺少分号,而不是行的行之后的问题." 然后我开始尝试其他类似的语法错误:
错误C2065:'myUndeclared':未声明的标识符
错误C2143:语法错误:在'if'之前缺少')'
等等...
现在,所有这些错误同样会带我走到问题之后,并在if声明之前抱怨某事.
考虑以下:
SomeFunction(x) //Notice, there is no ';' here
if(bSomeCondition)
{
...
}
Run Code Online (Sandbox Code Playgroud)
我收到两个编译错误:
(第265行)错误C2065:'x':未声明的标识符
(第266行)错误C2143:语法错误:缺少';' 在"如果"之前
但是,第一个错误正确告诉我行号,尽管丢失了分号.这告诉我编译器在解析时不会被绊倒,并且能够使它超过分号问题.那么,为什么编译器坚持以这种方式报告语法错误呢?在找到它们的行上报告其他错误(非语法).这是否与编译器进行多次传递有关?基本上,我希望具有C++编译器工作知识的人可以具体解释编译器正在做什么,这需要以"之前"的方式报告错误.
我正在寻找一种编写代码的方法,以便在程序首次启动时,这段代码只运行一次.如果程序已关闭并再次启动,则代码将不会再次运行.只有在卸载整个应用程序并从头开始安装树脂时,它才会再次运行.
数据库中的配置文件或标志不是此问题的解决方案.
我在某个地方(我似乎无法找到)读到一些基本上运行一次的方法,然后它可以基本上将变量编译成二进制文件,永远使用.
感谢您的帮助,我可以得到这个!