
No.1ベストアンサー
- 回答日時:
できません。
struct型に対するシフト命令や反転命令は未定義のはず
unsigned int *p = t;
t[0] <<=8;
t[0] = ~t[0];
とかならできます。
No.8
- 回答日時:
構造体に対してのビット演算は、「できない」というよりも、「定義されていない」です。
なので、その動作はjohnsmith_さんが定義する必要があります。
他の誰も「正解」は持ち合わせていません。
void shift_left(struct test *pt,int s);
struct test t;
t.i[0]=1;
t.i[1]=2;
shift_left(&t,8);
printf("%d\n",t.i[0]);
printf("%d\n",t.i[1]);
とした場合に、どういった結果が欲しいのかでshift_leftの中身を決定する形になります。
No.6
- 回答日時:
Cではできないのはすでに回答にあるとおりですが、気になる点が。
>ここで******さんが直接正解を教えてくださる方が、
>これから私が自分で体感するよりもよほど手っ取り早いと思います。
いいえ。
「自分で実行し理解する」ということを放棄した時点で逆です。
その考え方がある時点で「上辺だけわかったつもり」になっておしまいです。
また、「質問すればスグ回答がつく」とも限りません。
QAサイトを「便利な魔法の箱」とでも考えてませんか?
回答ありがとうございます。
>「自分で実行し理解する」ということを放棄した時点で逆です。
>その考え方がある時点で「上辺だけわかったつもり」になっておしまいです。
つまり、できるかできないかは自分で実行して理解するべきであるということですね。
「構造体にたいして、ビット演算はできるのか」というのはC/C++の仕様の問題なので定義されているか、されていないかはっきりと決まっているものと思って質問させていただきました。
私は、この様に白か黒か(できるかできないか)はっきり決まっているだろうことがらというのは、「知る」ものであって、自分で実行して「理解」するというようなものではないと思っております。(個人的な意見ですが)
>また、「質問すればスグ回答がつく」とも限りません。
>QAサイトを「便利な魔法の箱」とでも考えてませんか?
教えて!gooのC/C++コーナーでは、今までにあった質問の一覧を見ればわかるとおり難しい質問でなければ、質問してからかなりの短時間で回答をいただくことができます。
とくに、私の質問はC/C++の基本的な仕組みに関する初歩的なものなのですぐに回答してくださる方がいるだろうと思って質問しました。(実際すぐに回答をいただきました)
QAサイトは「魔法の箱」とまではいきませんが、便利なサービスだとは思っています。
No.5
- 回答日時:
こんばんは。
以下で良ければ参考程度に。
template<typename __Tp = int, size_t __N = 1>
struct test_t
{
typedef test_t<__Tp, __N> _Self;
enum { Count = __N };
__Tp i[__N];
_Self& operator <<= (const __Tp& shl)
{
for(int n = 0; n < __N; ++n)
this->i[n] <<= shl;
return *this;
}
_Self& operator >>= (const __Tp& shr)
{
for(int n = 0; n < __N; ++n)
this->i[n] >>= shr;
return *this;
}
const _Self operator ~() const
{
_Self tmp = *this;
for(int n = 0; n < __N; ++n)
tmp.i[n] = ~tmp.i[n];
return tmp;
}
};
template<typename __Tp>struct test_t<__Tp, 0>;//error
//int[2]の配列にする
typedef test_t<int, 2> Test;
int main()
{
Test a = {1, 2};
a = ~a;
::printf("[operator ~()]\n");
for(int i = 0; i < Test::Count; ++i)
{
::printf("[%d] = %d\n", i, a.i[i]);
}
Test b = {1, 2};
b <<= 8;
::printf("[operator <<=()]\n");
for(int i = 0; i < Test::Count; ++i)
{
::printf("[%d] = %d\n", i, b.i[i]);
}
Test c = {0xffff, 0xffffff};
c >>= 8;
::printf("[operator >>=()]\n");
for(int i = 0; i < Test::Count; ++i)
{
::printf("[%d] = %d\n", i, c.i[i]);
}
return 0;
}
Thank you for giving me a detailed source code for my question.
Now, I can't understand it perfectly because I'm not very
experienced in programming a computer program with C++ language yet.
So I will learn that more.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラムが書けません。 4 2023/01/22 22:57
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Excel(エクセル) Excelの置換が上手くいかない Microsoft® Excel® 2019 MSO (バージョン 5 2022/08/17 22:26
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- 情報処理技術者・Microsoft認定資格 2進数の問題を教えてください。 1 2022/07/27 09:42
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
複数桁10進数の*桁目だけを抽出...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
int16_t の _t は何?
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
ラップ関数とはどんなものですか?
-
acceptをalarmでタイムアウトさ...
-
read関数をノンブロッキングで...
-
4けたの数字で15になる組み合わせ
-
c言語の配列を使ってサイコロを...
-
Win32APIで作るコンボボックス...
-
PowerShellがうまくいかない
-
プログラミングの質問です。 #i...
-
C2601 ローカル関数の定義について
-
return 1L
-
因数分解を行うプログラムについて
-
(マルチスレッド)_beginthrea...
-
C++プログラミングコードにポリ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
最早開始時間と最遅完了時刻を...
-
【C++】関数ポインタの使い方
-
ラップ関数とはどんなものですか?
-
(int *)の意味
-
実数の整数部,小数部の取得
-
「{ } で囲むだけ」は正しい?
-
if と配列の組み合わせ
-
ColorをRGBで指定する方法
-
acceptをalarmでタイムアウトさ...
-
systemの戻り値を取得する方法
-
足して100になるような乱数のア...
-
PowerShellがうまくいかない
-
std::set<int> で、ある値が何...
-
C言語の配列をC++のvectorに高...
-
構造体の勉強中です 合計点の高...
おすすめ情報