2
Not getting the char value: 
#define XL 33 
#define OR 113 
#define NOR 313 
#define TN 344 

int to_bits(int critn,char *mask) 
{ 
unsigned int x; 
int begin; 

if (critn < XL) begin = 1; 
else if (critn < OR) begin = XL; 
else if (critn < NOR) begin = OR; 
else if (critn <= TN) begin = NOR; 
else begin = 0; 
x = critn - begin; 

*mask = (char)(0x80 >> (x % 8)); 

return (int)(x >> 3); // fast divide by 8 
}

メソッドの説明と例については、次のC++メソッドの説明を参照してください 。

私はJavaで次のメソッドを作成しました。

ClassA{

final static int xl = 33;
final static int or = 113;
final static int nor = 313;
final static int tn = 344;

public int to_bits(int critn){
    int x;
    int begin;

    if(critn<xl)
     begin = 1;
    else if (critn<or) 
     begin = xl;
    else if (critn<nor)
     begin = or;
    else if (critn<tn) 
     begin = nor;
    else begin = 0;

     x = critn - begin;

    char mask = (char)(0x80 >> (x % 8));
    System.out.println(mask);

    return (int)(x >> 3);

}


public static void main(String args[]){
    ClassA a =new ClassA();
    a.to_bits(312);

}

}

マスクの出力をビットセットオブジェクトに取り込むことはできますか?私は(charフィールドの特別なchar出力)として出力されます

24。

文字値と整数値の両方を取得する方法も提案してください。ありがとう

4

3 に答える 3

2

マスクをバイナリとして出力できるかどうか尋ねていますか?

もしそうなら、これは仕事をします:

    System.out.println(Integer.toBinaryString(mask));

または16進数:

    System.out.println(Integer.toHexString(mask));

編集-私は以前に使用すると言いましたInteger.toString(mask, 2 /* or 16 */)が、それは署名されたものとして番号をフォーマットします...これは明らかにあなたを混乱させます。)


最終的には、Javaメソッド呼び出しから複数の値を返すことも知りたいと思うでしょう。答えは、配列(またはオブジェクト)の値を返すことです。例えば

    return new int[]{(char)(0x80 >> (x % 8)), x >> 3});

または、パラメータとして渡される可変配列またはオブジェクトにそれらを設定します。


charJavaの16ビット型だと気づいていない気がします。C / C ++と同等の型が必要な場合char、最も近いのはJavabyte型(符号付き8ビット型)です。


さらに考えてみると、最も簡単なアプローチは、値を与えるために計算を行うことintです。例えば

    return new int[]{0x80 >> (x % 8), x >> 3});

必要に応じて、呼び出し元にいずれかの値を他のタイプにキャストさせます。

これらの値がビット単位の演算に使用されることを意図していると仮定すると、ビットパターンが正しい場合、それらが負に見える可能性があるという事実は関係ありません。それらはビットパターンであり、数値ではないことを忘れないでください。それが紛らわしい場合は、Integer.toHexString(...)またはInteger.toBinaryString(...)を使用して、署名されていない形式で印刷してください。

于 2011-04-08T13:40:57.417 に答える
0

これは、記号を考慮しない場合に役立ちます。そうでなければ、私たちはイワナに固執することができます。

// char mask =(char)(0x80 >>(x%8)); バイトマスク=(byte)(0x80 >>(x%8)); System.out.println(Integer.toString(mask、2));

出力:1 24

于 2011-04-08T14:07:53.627 に答える
0

簡単な答えは次のとおりです。複数の値を返す方法はありません。

長い答えは次のとおりです。1つの値に複数の値を入れることができます。少数の値のみを返し、すべての値が同じタイプである場合は、配列を使用します。(Stephen Cの回答を参照)それ以外の場合はオブジェクトを使用します。あなたの場合:

class MaskAndBits {
      char mask;
      int bits;
      public BitsAndMask(char mask, int bits) {
        this.mask = mask;
        this.bits = bits;
      }
 }

そしてreturn new Whatever((char)(0x80 >> (x % 8));, (int)(x >> 3))。全体として、これは配列ソリューションよりも入力するのがはるかに多いですが、返される2つの値を混同するのは難しいです;-)

于 2011-04-08T14:13:43.237 に答える