teratail header banner
teratail header banner
質問するログイン新規登録
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

817閲覧

C++ bit演算 条件式

gozi

総合スコア17

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/10/14 17:55

0

0

C++で書いていてbit演算が分からず困っています。

型は固定で、unsignd char型です。
unsigned char型に格納されているものがあらかじめ用意されているものと同じかどうか調べるプログラムが書きたいのですが、うまくいかずに詰まっています。

C++

1typedef unsigned char Byte 2 3Byte* action; 4Byte flag[/*適当な個数*/]; 5 6// 初期化等々 7 8// 以下やりたいこと(実際はエラー) 9if(action == flag[/* 適当な番号*/]) { 10 // 特定のアクション 11}

やりたいことはコードの通りで、actionと元々作ってあるflagが同じであった時に特定の処理を行いたいです。
actionが多くなることも想定するとswitchでできたら一番良いとも考えています。

どうぞよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KoichiSugiyama

2018/10/15 00:52

何がうまくいってないのか第三者から見て判りにくいので、明確にしたほうが的確な回答が付きやすいと思います。上記のコードでは判定できないアクションが存在するとか、switch文だとコンパイルエラーが出てしまう、等問題点を絞ってください。
gozi

2018/10/15 01:09

actionはどうでもよくて、if文つまりタイトルにあるbit同士での条件式がやりたいのです。私の思い違いで、bitとunsigned charと書けば分かるものだと勘違いしていました。このままでは伝わらないことはわかりましたので、アクションや初期化などなどいらないと思ったいたものを形にしたうえでコード内でいらないというコメントをつけたものを上げたいと思います。
guest

回答3

0

ベストアンサー

こういうこと?

c++

1#include <iostream> 2 3typedef unsigned char Byte; 4using std::cout; 5using std::endl; 6 7int main(){ 8 Byte* action = new Byte[1]{0b0000'0101}; 9 Byte flag[] = {0b0000'0001, 0b0000'0010}; 10 // action[0]について 11 if(action[0] & flag[0]){ 12 cout << "flag[0]を満たす" << endl; 13 } 14 if(action[0] & flag[1]){ 15 cout << "flag[1]を満たす" << endl; 16 } 17}

2進数リテラルを用いているのでc++14以降専用です。

投稿2018/10/15 02:02

編集2018/10/15 02:03
asm

総合スコア15149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gozi

2018/10/15 06:48

ありがとうございます。 こういうことです 読みづらいコードと説明で大変申し訳ございませんでした。
guest

0

「C言語 ビット演算」でぐぐってみましょう。
それで出てくるのを一通り読んだあと、その中で疑問に思うことがあれば聞いてください。

わけがわからんのに、わけのわからん質問したところで、ワケワカラン回答がつくだけですぜ

投稿2018/10/15 00:26

y_waiwai

総合スコア88180

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gozi

2018/10/15 01:10

はしょりすぎていたようですね。分かっている人からすると調べずに投稿しているように見えてしまうものですか。 今一度コードを書き直してみます。
guest

0

こんにちは。

bit演算を使いそうな雰囲気を感じ取れないコードですから、「C++で書いていてbit演算が分からず困っています。」と「やりたいことはコードの通り」の間の関連が読み取れないです。

とりあえずコードには次のミスがあるようです。

誤> if(action == flag[/* 適当な番号*/]) {
正> if(action == flag[/ 適当な番号*/]) {

投稿2018/10/14 18:53

編集2018/10/14 18:54
Chironian

総合スコア23274

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gozi

2018/10/14 23:52

ごめんなさい、急いでいて少し雑になっていました。 タイトルにあるように、条件式の部分でビットを使いたいです。 つまりここのコードでいうByte型の変数にビットが定義されるわけです。 ビット同士での条件式が分かれば何でもいいので、値は特に指定していませんが必要であれば追記します。(分からないので何が必要な事も分からないです) bit演算で調べるとunsigned char型で行っていることが多いのですが、タイトルとコード(unsigned chara型を比較しているだけの雑なもの)から関連性が読み取れないとなると結構難易度の高い内容であったりするのですか?不慣れなもので少し不安を感じています。
Chironian

2018/10/15 04:18

bit演算でできることは様々です。特定のビットが1であることを判定する、逆に特定のビットが0であることを判定するなどなど。 やりたいことを伝える際にまだ不慣れな言語(この場合C++)を使っても伝わらないし、頭の中も整理できません。 まずは日本語で「具体的に」記述してみませんか? そして、具体的に書くことが重要です。多くの場合、抽象的に書いても伝わりませんので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問