0

エラーが発生するのはなぜですか? 私にはかなり簡単に見えます。また、これは私がやろうとしていることを行うための最良の方法ですか?

#include <iostream> 
#include <string>


int main() { 

char j = "J"; 
std::cout << bitchar(j);
return 0; 
} 


std::string bitchar(char c) { 
  std::string s;
  unsigned thisdivisor = (unsigned)c;
  while (!thisdivisor) { 
      s += thisdivisor % 2 ? '0' : '1';
      thisdivisor /= 2;
  }
  return s; 
} 
4

5 に答える 5

3
#include <iostream> 
#include <string>
#include <bitset>

int main() {   
    char j = 'J'; 
    std::cout << std::bitset<8>(j);
    return 0;  
} 

ノート:

  1. "J"は単一文字の C スタイルの文字列 (末尾に が付いている) であり、 for\0を使用する必要があります。'J'char
  2. std::bitsetビットパターンの印刷に使用します。
于 2013-07-26T15:42:22.047 に答える
2

回答 1: なぜこれらのエラーが発生するのですか

char j = 'J'@losifMが言ったように、試してみてください。二重引用符は文字配列を定義し、単一の文字 (単一引用符) を探しています。

回答 2: より良い方法は何ですか

そのようなことを行うためのより良い方法は、 を使用してから、 を使用してstd::bitsetストリーミングすることcoutです。

//Add this
#include <bitset>

char j = 'j';
std::bitset<8> x(j);
std::cout << x;

その時点で自明であるはずですが、これは役立つかもしれません:数値がメモリに格納されている方法を(coutを使用して)印刷する方法は?

サイドノート:

  s += thisdivisor % 2 ? '0' : '1';

する必要があります

  s += thisdivisor % 2 ? '1' : '0';

ifが( ) をthisdivisor % 2返す場合、それを sに追加する必要があるためです。1true1

于 2013-07-26T15:42:41.920 に答える
2

変数に文字を割り当てるchar j = 'j'代わりに試してください。="j"「j」は文字列配列です。

于 2013-07-26T15:38:18.750 に答える
2

エラーの説明を忘れていました。おそらくそれは次のようなものです

‘bitchar’ was not declared in this scope

で呼び出す前に関数を宣言しなかったためですmainbitcharbeforeの定義を移動するかmain、宣言を before または inside に追加しますmain

std::string bitchar(char c);

次に、おそらく次のようなものが得られます。

invalid conversion from ‘const char*’ to ‘char’

"J"文字変数に文字列リテラルを代入しようとしているからです。'J'代わりに文字リテラル(一重引用符付き) を使用してください。

その後、出力が得られないことがわかります。これwhile (!thisdivisor)は、値がゼロである限りループするためです。したがって、ゼロ以外の値を指定してもループしません。ゼロではない間にループしたいwhile (thisdivisor)(またはwhile (thisdiviser != 0)もっと明示的にしたい場合) 。

次に、ビットが反転していることがわかります。モジュロ結果がゼロの場合は「0」が必要ですが、ゼロでない場合はテストで「0」が返されます。

s += thisdivisor % 2 ? '1' : '0';

また

s += (thisdivisor % 2 == 0) ? '0' : '1';

最後に、より従来型の最上位ビット優先の順序を取得するために、文字列を逆にする (または追加するのではなく先頭に追加することによって構築する) ことが必要な場合があります。

于 2013-07-26T16:03:00.833 に答える
1

char配列(ポインターに減衰)をchar(J)に割り当てています。そして、std::string を char (c-string である必要があります) で初期化します。

于 2013-07-26T15:37:49.630 に答える