MATLAB Answers

how to find out if a number is even or not

2,338 ビュー (過去 30 日間)
divya r
divya r 2012 年 10 月 23 日
編集済み: Matt J 2020 年 10 月 9 日
I know in C language, for any number x using x%2 will calculate the remainder when x is divided by 2, which will help decipher whether its even or not.
How can I do this in matlab?

  3 件のコメント

Jaimin Motavar
Jaimin Motavar 2019 年 7 月 5 日
you can do it this in matlab by the very simple way by using implicit function rem(a,b) , where a is devided by b.
for example.
r1=rem(4,2)
r=0;
r2=rem(9,2)
r2=1;
luis fonseca
luis fonseca 2020 年 10 月 9 日
This is the easiert way:
N = 1; % number you want to know if even or odd
%% create an expression
s = (-1)^N;
%% if s = -1, the N is odd, else N is even
if s == -1
disp('N is odd')
else
disp('N is even')
end
Steven Lord
Steven Lord 2020 年 10 月 9 日
So Inf is even?
>> s = (-1)^Inf
s =
1
How about NaN?
>> s = (-1)^NaN
s =
NaN
Does this hold for a complex number as well?
>> N = 3+4i;
>> s = (-1)^N; % Not equal to -1

サインインしてコメントする。

採用された回答

Walter Roberson
Walter Roberson 2012 年 10 月 23 日
編集済み: MathWorks Support Team 2018 年 11 月 9 日
See mod and rem

  1 件のコメント

Dillen.A
Dillen.A 2020 年 2 月 5 日
A quick example:
A = [-2 -1 0 1 2 3 4 5 6]; % A is your value or matrix
IS_EVEN = ~mod(A,2)
Which is the same as
IS_EVEN = ~bitget(abs(A),1)
And the same as
IS_EVEN = ~rem(A,2)
You can use logical() instead of ~ (isnot) for ODD, should you want booleans. Also bitget() does not work for negative integers, hence abs().
A warning though; ONLY bitget() will throw an error if an element in A is not an integer! the others will output 'odd' for fractions.
Unless you will repeat this many many times, the speed is not relevant. Otherwise, you should vectorize.

サインインしてコメントする。

その他の回答 (7 件)

Jan
Jan 2012 年 10 月 23 日
Care for exceptions:
NaN, Inf, 1e54, int8(-128)
There are some FEX submission for this task, e.g. FEX: parity checker.

  0 件のコメント

サインインしてコメントする。


Matt J
Matt J 2012 年 10 月 23 日
if bitget(A,1) %odd
else %even
end

  2 件のコメント

Matt J
Matt J 2012 年 10 月 23 日
Note that solutions based on REM and MOD have certain non-robustness to large numbers, though I never quite understood why:
>> mod(bitmax+[1:8],2) %all are even
ans =
0 0 0 0 0 0 0 0
Josh Meyer
Josh Meyer 2018 年 10 月 10 日
In more recent versions of MATLAB, bitmax was replaced by flintmax. This is the largest consecutive floating point number. After flintmax, the value of eps is larger than 1 (slowly increasing in powers of 2), so representable numbers larger than flintmax are no longer consecutive.
So, the reason all of those numbers are even is because flintmax is an even number and the spacing between numbers is eps(flintmax) = 2.

サインインしてコメントする。


Ibn e Adam
Ibn e Adam 2020 年 2 月 18 日
% function to find even/odd
% n is input number for this function
function output=even_or_odd(n)
if rem(n,2)==0
output=even;
else
output=odd;
end
end

  4 件のコメント

表示 1 件の古いコメント
Achala Bohra
Achala Bohra 2020 年 2 月 24 日
why are even and odd (the values of output) not in inverted commas
Walter Roberson
Walter Roberson 2020 年 2 月 26 日
Ibn e Adam did not define the variables "even" or "odd" so we do not know what datatypes would be returned.
Matt J
Matt J 2020 年 2 月 26 日
not in inverted commas
I guess inverted commas = single quotes

サインインしてコメントする。


Anmol  singh
Anmol singh 2020 年 4 月 10 日
編集済み: Anmol singh 2020 年 4 月 10 日
A givennumber is even or odd for this we use & operator.
if any number is odd it must have right most bit 1.
example:
int i=5;
binary form i= 0101
now use & operator
int j=i&1;[0101&1]//
here j have 0001;

  1 件のコメント

Walter Roberson
Walter Roberson 2020 年 4 月 10 日
This does not work in MATLAB. In MATLAB, the operation
c = A & B
is equivalent to
if A ~= 0
if B ~= 0
c = true;
else
c = false;
end
elseif B ~= 0
c = false;
else
c = false;
end
Yes, this could be made more efficient, but this models the & operator. The more efficient operation is &&
Now notice that this is not a bitwise operation. 5&1 is not binary 0101 & 0001 giving 0001: instead it is (5~=0) and (1 ~= 0)
The MATLAB equivalent to what you are discussing is the bitand() operator
bitand(5,1)
But if you are going to do that, you might as well just ask for the last bit directly:
bitget(5,1) %the 1 is a bit number with LSB being #1

サインインしてコメントする。


luis fonseca
luis fonseca 2020 年 10 月 9 日
This is the easiert way guys, its just math from highschool
N = 1; % number you want to know if even or odd
%% create an expression
s = (-1)^N;
%% if s = -1, the N is odd, else N is even
if s == -1
disp('N is odd')
else
disp('N is even')
end

  1 件のコメント

madhan ravi
madhan ravi 2020 年 10 月 9 日
what happens when N is an array?

サインインしてコメントする。


Matt J
Matt J 2020 年 10 月 9 日
編集済み: Matt J 2020 年 10 月 9 日
One more way to test even-ness in a scalar, s,
isEven=false;
try, validateattributes(s,"numeric","even"); isEven=true; end,

  0 件のコメント

サインインしてコメントする。

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by