小编Cha*_*dia的帖子

为什么operator%被称为"模数"运算符而不是"余数"运算符?

今天上班时我与我的一位同事进行了一次有趣的讨论.当他遇到以下情况时,他感到很惊讶:

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截断的原因吗?

c++ standards operators modulus

22
推荐指数
2
解决办法
6005
查看次数

WPF Toolkit DataGrid列调整大小事件

我在我正在使用的其中一个应用程序中使用WPF Toolkit Datagrid.我想要的是将列宽和displayindex存储为用户首选项.我已经获得了list displayindex但是为了调整大小,我在datagrid上找不到任何事件,这会在列大小更改后触发.我已经尝试了"SizeChanged"事件,我猜这个事件只是在它最初计算大小时被触发,而且对于整个数据网格也是如此,而不是针对各个列.
任何替代解决方案或任何人都知道该事件?

.net c# wpf datagrid wpftoolkit

13
推荐指数
2
解决办法
8357
查看次数

为什么C++编译器在行之后而不是在行上给出错误?

今天我正在与我的编译器发生另一项国内事务时,这个问题突然出现在我的脑海中.尽管我的粉红色(由于我在工作时所做的所有分号按压),我在一个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++编译器工作知识的人可以具体解释编译器正在做什么,这需要以"之前"的方式报告错误.

c++ compiler-construction grammar compilation

9
推荐指数
3
解决办法
3837
查看次数

如何编写代码只运行一次

我正在寻找一种编写代码的方法,以便在程序首次启动时,这段代码只运行一次.如果程序已关闭并再次启动,则代码将不会再次运行.只有在卸载整个应用程序并从头开始安装树脂时,它才会再次运行.

数据库中的配置文件或标志不是此问题的解决方案.

我在某个地方(我似乎无法找到)读到一些基本上运行一次的方法,然后它可以基本上将变量编译成二进制文件,永远使用.

感谢您的帮助,我可以得到这个!

c# winforms

3
推荐指数
1
解决办法
8506
查看次数