我想在PHP中找到所有多个数字.
我正在使用这样的东西
if($count != 20 )
Run Code Online (Sandbox Code Playgroud)
计算如果$count不等于20.
但我也需要这个脚本来检查是否$count不等于20,40,60,80,100,120,140,160等.
有任何想法吗?我想我需要使用模数符号(%),但我不知道.
我从汇编中记得整数除法指令同时产生商和余数.因此,在python中,内置的divmod()函数比使用%和//运算符更好地表现性能(假设当然需要商和余数)?
q, r = divmod(n, d)
q, r = (n // d, n % d)
Run Code Online (Sandbox Code Playgroud) 我想知道如何在Java中获得单值的余数和商.
例:
3/2我应该得到1.5的价值.
如果我使用/运算符,我只得到商.如果我使用%操作员,我只得到余数.如何在同一个变量中同时获得两者?
我有这条线:
randomIndex = Int(drand48() % Double(alphabetColors.count))
Run Code Online (Sandbox Code Playgroud)
而Xcode 8(Swift 3)告诉我:
'%' is unavailable: Use truncatingRemainder instead
Run Code Online (Sandbox Code Playgroud)
还没有操作员吗?我该如何转换代码?
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
vector<int> v = {1, 2, 3, 4, 5, 6, 7};
int i = -4;
cout << i << endl;
cout << v.size() << endl;
cout << i % v.size() << endl;
cout << -4 % 7 << endl;
}
Run Code Online (Sandbox Code Playgroud)
The above code prints:
-4
7
5
-4
Run Code Online (Sandbox Code Playgroud)
Can someone please explain why i % v.size() prints 5 instead of -4? I'm guessing it has something to do …
今天上班时我与我的一位同事进行了一次有趣的讨论.当他遇到以下情况时,他感到很惊讶:
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#编译器中的一个错误.
考虑这段代码(在方法内):
const long dividend = long.MinValue;
const long divisor = -1L;
Console.WriteLine(dividend % divisor);
Run Code Online (Sandbox Code Playgroud)
它编译时没有错误(或警告).好像是一个bug.运行时,0在控制台上打印.
然后没有const,代码:
long dividend = long.MinValue;
long divisor = -1L;
Console.WriteLine(dividend % divisor);
Run Code Online (Sandbox Code Playgroud)
当它运行时,它正确地导致OverflowException被抛出.
C#语言规范专门提到了这个案例,并说System.OverflowException将抛出一个.它不依赖于上下文checked或unchecked似乎(也是与余数运算符的编译时常量操作数的错误与checked和相同unchecked).
int(System.Int32),而不仅仅是long(System.Int64)发生同样的错误.
相比之下,编译器处理dividend / divisor与const操作数比要好得多dividend % divisor.
我的问题:
我是对的,这是一个错误吗?如果是,它是一个众所周知的错误,他们不希望修复(因为向后兼容性,即使使用% -1编译时常量相当愚蠢-1)?或者我们应该报告它,以便他们可以在即将推出的C#编译器版本中修复它?
我可以写程序
int a = 3;
int b = 4;
Console.WriteLine(a % b);
Run Code Online (Sandbox Code Playgroud)
我得到的答案是3. 3 mod 4 = 3怎么样?
我无法弄清楚这是如何以这种方式计算的.
在早期的课程中,我被教导n % d = r并将其视为n = d*q + r,d除数在哪里,q是商,并且r是余数(注意其余部分永远不会是负数).
因此,例如,-111 mod 11是10,因为-111 = -11*-11 + 10(相反-111 = -11*10 -1,看到这将如何给我们一个负余数).
但是,打印结果时-111 % 11,-1结果并非如此10.为什么?这在技术上是不是错了?
对于特定碱基,是否有创建比标准%运算符更快的整数模数的技巧?
对于我的程序,我会寻找大约1000-4000(例如n%2048).有没有以执行N模量2048不仅仅是一个更快的方法:n%2048?