No.3ベストアンサー
- 回答日時:
別な方法で。
入力された整数を2で割って、整数化してから2倍します。
2倍した数字と元の数字が同じなら「偶数」です。
例)
if(input_val == int(input_val/2)*2)
// 偶数の処理
else
// 奇数の処理
こんな、感じ?
No.10
- 回答日時:
なるほど、言われてみればDSPなど特殊用途のプロセッサなら、主に行う処理内容によってどのような数値表現が最適か違ってくるでしょうから、いろいろな数値表現があるかもしれませんね。
3D専用のプロセッサならintが無いことも考えられますから、Cコンパイラを実装するならintの数値表現はコンパイラの作成者まかせですね。
Cのインタープリタというのも、昔販売されていましたね。学習用とか趣味でつくる人も当然いるでしょう。
でも、私の個人的な感想ですが、質問者さんが環境を書かれていないのならなおさら、そういう特殊な状況というのは考える必要はないように私は思いました。
No.9
- 回答日時:
#8の補足要求は、質問者さんに対してではなく、私に対してのような気がするので、念のため補足します。
違っていたらすみません。> Cはネイティブコードで動くコンパイラですから、処理系依存ではなくCPU依存ということだと思います。
規格上はネイティブコードかどうかなど、一切問われていません。実際、インタプリタも実在します。
なお、プロセッサによっては、負の値の内部表現を拘束しないものもあります。乗除算器がなく、オーバーフローフラグのようなものがなければ、負の内部表現をどうするかは、ソフト側で決めなければなりません。
> 1の補数表現を使うCPUなんてこの現代に存在しますか?
存在するかどうかでいえば存在しますが、非常に稀なことは確かです。ただ、どんなに稀であっても、実際にそれを扱わなければならない状況になれば、その当事者にとってはそれが自分が相手にしなければならない処理系であり、世間のトレンドや統計上のことを言ってみても無意味です。
質問者さんがどんな処理系を相手にしているかは、質問者さん自身が補足してくださらない以上、我々にはわかりません。メインフレームなのか、マイクロコントローラなのか、DSPなのか、インタプリタなのか、自作プロセッサなのか、わかるはずがないですから。
ところで、研究目的などで、自作の仮想マシンやFPGAなどで自作したプロセッサであれば、1の補数表現だろうが、符号ビット+絶対値だろうが、好きにできます。工業用途ではなく、研究用途では、およそあらゆる可能性を考慮しなければなりません。
また、標準規格の学習目的等の理由で、規格厳密合致プログラムを書く訓練をしている可能性も当然考慮すべきです。
だからこそ、処理系や用途を特定してよいのであれば、それを質問時に明確にする必要があるのです。
No.8
- 回答日時:
Cはネイティブコードで動くコンパイラですから、処理系依存ではなくCPU依存ということだと思います。
しかし、1の補数表現を使うCPUなんてこの現代に存在しますか?No.7
- 回答日時:
参考までに、論理積を使うとなぜ処理系に依存するかを補足しておきます。
符号付き整数型に対して&演算子を使うと、結果の値は整数の内部表現に依存します。正の値の場合は問題ないのですが、負の値の場合、その内部表現がどうなるかは処理系に依存しますので、結果として、符号付き整数に対する&演算子の振る舞いは処理系に依存してしまいます。
具体的には、負の値の内部表現に1の補数を使う処理系の場合、-1を16ビットで表すと0xfffeになります。-1は2で割り切れないので奇数ですが、最下位ビットは0です。それに対して、2の補数の場合、-1の内部表現は0xffffですから、最下位ビットは1になります。
質問者さんが処理系を特定されていない以上、一般論としては&演算子は使うべきではありません。
No.6
- 回答日時:
偶数は、2進数で表現すれば1の位が0です。
ですから、1とビットANDを調べ、0なら偶数、1なら奇数です。
読み込まれた数を a とすれば
if((a & 1) == 0) {
printf("偶数\n");
} else {
printf("奇数\n");
}
No.5
- 回答日時:
> 剰余演算子を使ってなら作れるんですけど
では、それを貼りましょう。
入力が負の値の場合、どのようにしているかに興味があります。
ちなみに、2で割り切れるかどうかを判定するだけであれば、div関数を使うのが簡単です。論理積を使うと処理系に依存してしまいます(剰余演算子を使った場合も処理系に依存します)ので、div関数を使えば確実です。
int value;
/* value に値を入力 */
if (div(value, 2).rem == 0)
/* 偶数 */
else
/* 奇数 */
No.4
- 回答日時:
奇数なら1、偶数なら0を返す関数f(x)をつくってそれを呼び出したらどうですか?
f(x)自身は、0と1のとき以外は知らんといって他力本願で解決してしまう
if (x==0) ans=0;
else if(x==1) ans=1;
else if(x<0) ans = f(x+2);
else if(x>=2) ans = f(x-2);
といった具合でどうでしょう?
No.2
- 回答日時:
#1です。
なんか中途半端にソース載っちゃいました。
一応全部のせます。
#include <stdio.h>
int main()
{
int a = 10;
int b = 15;
if( a & 1 )
puts("奇数");
else
puts("偶数");
if( b & 1 )
puts("奇数");
else
puts("偶数");
return 0;
}
No.1
- 回答日時:
その数字が偶数か奇数かを調べたいのであれば
int a = 10;
int b = 15;
if( readNum / 2 )
とするのではなくて
if( readNum & 1 )
とすれば偶数か奇数かはわかります。
一応乗除演算子ではありません・・論理演算しです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- 数学 場合によって計算が変わる数列について。 4 2023/04/20 18:24
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 malloc 関数を使って教えてください。 入出力例1 3 2022/07/21 09:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2の補数を計算するプログラム
-
3のつく数と3の倍数を表示 C言語
-
迷路を脱出する経路探索プログ...
-
intとlongは同じ?
-
C言語で%を使わない余りの出し方
-
迷路の解を見つけるアルゴリズム
-
分数の足し算をさせるプログラ...
-
【C#】SQL文の中に変数を埋め込...
-
C++で表を作成したいのです ...
-
C言語 格子点が多角形の中にあ...
-
再起呼び出しの回数をカウント...
-
16bitで乱数を生成する方法
-
argvのNULLチェック
-
画像の拡大・縮小
-
以下のプログラムはOpenCVで画...
-
C言語でテーブル引きしたら速度...
-
PIC16F88マイコンのC言語プログ...
-
whileとifを使い偶数を出すには
-
ヌメロンのプログラム
-
条件が多い場合
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報