如何判断一个数是否为偶数

2032次观看(过去30天)
迪夫r
迪夫r 2012年10月23日
评论道: 沃尔特·罗伯森 2021年10月28日
我知道在C语言中,对于任何数字x,使用x%2将计算余数,当x除以2时,这将有助于破译它是否为偶数。
我如何在matlab中做到这一点?
3评论
史蒂文的主
史蒂文的主 2020年10月9日
所以 即使是吗?
>> s = (-1)^Inf
s =
1
如何 ?
>> s = (-1)^NaN
s =
这对复数也成立吗?
> N = 3+4i;
> s = (-1)^N;%不等于-1

登录发表评论。

接受的答案

沃尔特·罗伯森
沃尔特·罗伯森 2012年10月23日
编辑:MathWorks支持团队 2018年11月9日
看到 国防部 而且 快速眼动
1评论
Dillen。一个
Dillen。一个 2020年2月5日
编辑:Dillen。一个 2020年2月5日
一个快速的例子:
A = [-2 -1 0 1 2 3 4 5 6];% A是你的值或矩阵
IS_EVEN = ~国防部(2)
哪个是一样的
IS_EVEN = ~ bitget (abs (A), 1)
IS_EVEN = ~ rem (2)
您可以使用 逻辑() 而不是 (不是)对于ODD,如果你想要布尔值。也 bitget () 对负整数无效,因此 abs ()
一个警告;只有 bitget () 如果A中的元素不是整数,将抛出一个错误!其他的将为分数输出'奇数'。
除非你重复这个动作很多很多次,否则速度是无关紧要的。否则,您应该向量化。

登录发表评论。

更多的答案(8)

1月
1月 2012年10月23日
照顾例外:
NaN, Inf, 1e54, int8(-128)
对于这个任务有一些FEX提交,例如: FEX:奇偶校验检查

路易斯·丰
路易斯·丰 2020年10月9日
这是最简单的方法,这只是高中的数学
N = 1;%你想知道的是偶数还是奇数
%%创建表达式
s = (1) ^ N;
%%如果s = -1, N为奇数,否则N为偶数
如果s = = 1
disp (N是奇数的
其他的
disp (' N是偶数
结束

马特·J
马特·J 2012年10月23日
如果bitget (1)%奇怪
其他的%甚至
结束
2的评论
乔什·迈耶
乔什·迈耶 2018年10月10日
编辑:乔什·迈耶 2018年10月10日
在MATLAB的最新版本中, bitmax 被取代了 flintmax .这是最大的连续浮点数。后 flintmax 的价值。 每股收益 大于1(以2的次幂缓慢增加),所以可表示的数字大于 flintmax 不再是连续的。
这些数字都是偶数的原因是 flintmax 是偶数,数字之间的间距是 每股收益(flintmax) = 2

登录发表评论。


伊本e亚当
伊本e亚当 2020年2月18日
%函数来查找偶/奇
% n是这个函数的输入数
函数输出= even_or_odd (n)
如果快速眼动(n, 2) = = 0
输出=甚至;
其他的
输出=奇怪;
结束
结束
4评论
马特·J
马特·J 2020年2月26日
不是用倒逗号
我猜倒逗号=单引号

登录发表评论。


Anmol辛格
Anmol辛格 2020年4月10日
编辑:Anmol辛格 2020年4月10日
给定的数字是偶数还是奇数,对此我们使用&运算符。
如果任何数字是奇数,它的最右位一定是1。
例子:
int i = 5;
二进制形式i= 0101
现在使用&运算符
int j =我;[0101 & 1]/ /
这里有0001;
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2020年4月10日
这在MATLAB中不起作用。在MATLAB中进行运算
c = A & B
相当于
如果~ = 0
如果B ~ = 0
c = true;
其他的
c = false;
结束
elseifB ~ = 0
c = false;
其他的
c = false;
结束
是的,这可以变得更高效,但是这建模了&运算符。更高效的操作是&&
注意,这不是位运算。5&1不是给出0001的二进制0101 & 0001:而是(5~=0)和(1 ~=0)
与您正在讨论的等价的MATLAB是bitand()操作符
bitand(5、1)
但如果你要这么做,你不妨直接问最后一点:
bitget(5、1)%the 1是一个位数,LSB是#1

登录发表评论。


马特·J
马特·J 2020年10月9日
编辑:马特·J 2020年10月9日
还有一种测试标量均匀性的方法, 年代
isEven = false;
试一试validateattributes(年代,“数字”“甚至”);isEven = true;结束

霍华德•林
霍华德•林 2021年10月15日
编辑:霍华德•林 2021年10月27日
testN = 10000000;
testvar =圆(兰德(testN, 1) * testN);
抽搐
output1 =快速眼动(testvar, 2);
toc
抽搐
output2地板(testvar / 2) = ~ = testvar / 2;
toc
抽搐
output3 = bitget (testvar, 1) = = 1;
toc
抽搐
output4 =(1)。^ testvar = = 1;
toc
以上就是输出
> > testisoddspeed
运行时间是0.101100秒。
运行时间为0.010721秒。
运行时间是0.054311秒。
运行时间是0.040362秒。
编辑:在AMD Ryzen 5800H 2018b上测试。当变量已经是整数时的更新答案,以便不必先进行类型转换。
testN = 10000000;
testvar =圆(兰德(testN, 1) * testN);
抽搐
output1地板(testvar / 2) = ~ = testvar / 2;
toc
testvar = uint32 (testvar);
抽搐
output2 =快速眼动(testvar 2) = = 1;
toc
抽搐
output3 = bitget (testvar, 1) = = 1;
toc
抽搐
output4 =(1)。^ testvar = = 1;
toc
结果
> > testisoddspeed
运行时间是0.014634秒。
运行时间是0.123930秒。
运行时间是0.013089秒。
运行时间是0.032953秒。
Bitget稍微快一点。
11日评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年10月28日
这是我使用的代码:
流(“1 \ n”);
小牛();
流(“2 \ n”);
小牛();
流(“3 \ n”);
小牛();
函数小牛();
testN = 10000000;
testvar =圆(兰德(testN, 1) * testN);
抽搐
output1 = mod (testvar, 2);
toc
抽搐
output2地板(testvar / 2) = ~ = testvar / 2;
toc
抽搐
output3 = bitget (uint32 (testvar), 1);
toc
抽搐
output4 =(1)。^ testvar = = 1;
toc
结束

登录发表评论。

世界杯预选赛小组名单社区寻宝

在MATLAB中央找到宝藏,并发现社区可以如何帮助你!世界杯预选赛小组名单

开始狩猎!

Baidu
map