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);

}

}

我们可以将掩码的输出转换为 Bitset 对象吗?我将作为(char 字段的特殊字符输出)

24.

还请建议如何同时获取字符和整数值。谢谢

4

3 回答 3

2

您是在问是否可以将掩码输出为二进制文件?

如果是这样,这将完成这项工作:

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

或十六进制:

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

编辑-我之前说过要使用Integer.toString(mask, 2 /* or 16 */),但是将数字格式化为带符号的……这显然会让您感到困惑。)


您最终还想知道从 java 方法调用中返回多个值。答案是返回数组(或对象)中的值;例如

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

或将它们设置在作为参数传递的可变数组或对象中。


我有一种感觉,你还没有意识到这char是 Java 中的 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

简短的回答是:没有办法返回多个值。

长答案是:您可以将多个值放入一个值中。如果您只想返回几个值并且所有值都属于同一类型,请使用数组。(参见 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))。总的来说,这比数组解决方案要多得多,但更难混淆返回的两个值;-)

于 2011-04-08T14:13:43.237 回答
0

如果不考虑符号,这可能很有用。否则我们可以坚持字符。

//字符掩码 = (char)(0x80 >> (x % 8)); 字节掩码 = (byte)(0x80 >> (x % 8)); System.out.println(Integer.toString(mask,2));

输出:1 24

于 2011-04-08T14:07:53.627 回答