質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
C++

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

Q&A

3回答

432閲覧

特定の場所から特定の個数を2進数->10進数へ変換する方法

erumoa400

総合スコア14

C++

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

0グッド

0クリップ

投稿2022/10/04 09:11

前提

2進数から10進数へ任意の場所から任意の個数変換するプログラムを作成したい
例えば2進数の10110101の[2]から4個だと1101となって10進数で13が出力されるというもの

実現したいこと

場所と個数の二つの変数を含む2進数から10進数への変換

該当のソースコード

C++

1int translate(vector<int>& bit, int start, int num) { 2 // translate({1, 0, 1, 1, 0, 1, 0, 1}, 2, 4)を呼び出すと13が返る 3} 4

試したこと

2進数から10進数へ変換するアルゴリズムは理解しましたが、場所や個数が変わるとうまく扱えませんでした。
教えていただけるとありがたいです。

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

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

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

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

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

maisumakun

2022/10/04 09:12

どこまで書いてみましたか?
y_waiwai

2022/10/04 09:29

まずはあなたのうまくいかないというコードを提示しましょう
SaitoAtsushi

2022/10/04 15:37

この質問は質問というより自分の替わりにコードを書いてくれという依頼に見えてしまいますね。 推奨されない質問をご覧ください。 https://teratail.com/help/avoid-asking わからないことが何であるのか明確であることが好ましく、まとめ方のコツが用意されているので一読することをお勧めします。 https://teratail.com/help/question-tips
kazuma-s

2022/10/05 08:43

2進数から10進数へ変換するアルゴリズムを理解したのなら、そのコードを質問に追記してください。 そうすれば、場所や個数の変更方法を回答します。
guest

回答3

0

値を蓄積していくパターンなのでここでは std::accumulate がピッタリと当て嵌まる事例だと思います。

cpp

1#include <iostream> 2#include <numeric> 3#include <vector> 4 5int from_binary_vector_to_integer(const std::vector<int>& bits, std::vector<int>::size_type start, std::vector<int>::size_type num) { 6 return std::accumulate(&bits[start], &bits[start + num], 0, [](int acc, bool element) { return acc * 2 + element; }); 7} 8 9int main(void) { 10 std::cout << from_binary_vector_to_integer({1, 0, 1, 1, 0, 1, 0, 1}, 2, 4) << std::endl; 11}

投稿2022/10/04 15:47

SaitoAtsushi

総合スコア5444

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

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

fana

2022/10/05 04:46 編集

(Currently, I don't know which reaction should be used. So I chose the rightmost one without any reason. Sorry if I made the wrong choice.)
guest

0

アルゴリズムを理解し、配列を10進変換できるなら、
あとは、
その配列の開始位置と個数から、新しい配列を作れば、それが実現できる、ということになります。

投稿2022/10/04 15:10

y_waiwai

総合スコア87774

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

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

0

C++

1int translate( const std::vector<int> &bit, int start, int num) 2{ 3 int ans = 0; 4 std::for_each_n( 5 std::next( std::begin(bit), start ), 6 num, 7 [&ans]( int b ){ ans = (ans<<1) + b; } 8 ); 9 return ans; 10}

として std::cout << translate({1, 0, 1, 1, 0, 1, 0, 1}, 2, 4); として呼び出したら 13 と出力されました.

投稿2022/10/04 09:33

編集2022/10/04 09:35
fana

総合スコア11656

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

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

fana

2022/10/04 09:39 編集

何か使ったことないやつを色々並べてみたら 13 って出た.良かった. (回答にも初心者マーク付けれればいいのにね)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問