Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C++;到Java(在Java中返回多个值) 未获取字符值: #定义XL 33 #定义或113 #定义NOR 313 #定义TN 344 int到_位(int准则、字符*掩码) { 无符号整数x; int开始; 如果(临界值3);//快速除以8 }_Java_C++_Bitset - Fatal编程技术网

从C++;到Java(在Java中返回多个值) 未获取字符值: #定义XL 33 #定义或113 #定义NOR 313 #定义TN 344 int到_位(int准则、字符*掩码) { 无符号整数x; int开始; 如果(临界值3);//快速除以8 }

从C++;到Java(在Java中返回多个值) 未获取字符值: #定义XL 33 #定义或113 #定义NOR 313 #定义TN 344 int到_位(int准则、字符*掩码) { 无符号整数x; int开始; 如果(临界值3);//快速除以8 },java,c++,bitset,Java,C++,Bitset,有关该方法的说明和示例,请参见 我用Java编写了以下方法: 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) b

有关该方法的说明和示例,请参见

我用Java编写了以下方法:

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 
}
ClassA{
最终静态int xl=33;
最终静态int或=113;
最终静态int nor=313;
最终静态积分tn=344;
公共整数到_位(整数标准){
int x;
int开始;
如果(准则3);
}
公共静态void main(字符串参数[]){
ClassA=新ClassA();
a、 至u比特(312);
}
}
我们可以将掩码的输出带入位集对象吗。 我将作为(char字段的特殊char输出)输出

二十四,


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

您是否询问是否可以将掩码作为二进制输出

如果是,这将完成以下工作:

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

}

}
或十六进制:

    System.out.println(Integer.toBinaryString(mask));
EDIT-我之前说过使用
Integer.toString(掩码,2/*或16*/)
,但这会将数字格式化为带符号的…这显然让您感到困惑。)


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

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


我感觉您还没有意识到,
char
在Java中是一种16位类型。如果你想要一个等价于C/C++<代码> char < />的类型,最接近的是java <代码>字节< /C++ >类型-A签署的8位类型。
进一步考虑,最简单的方法是进行计算,以获得
int
值;e、 g

    return new int[]{(char)(0x80 >> (x % 8)), x >> 3});
如果需要,让调用者将其中一个值转换为其他类型


假设这些值用于按位运算,那么它们看起来可能是负数这一事实与此无关。。。只要位模式正确。记住,它们是位模式而不是数字。如果这令人困惑,请使用
Integer.tohextString(…)
Integer.toBinaryString(…)
以无符号形式打印出来。

如果不考虑符号,这可能会很有用。否则,我们可以继续使用字符

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


输出:1 24

简短的回答是:无法返回多个值

答案很长:您可以将多个值放入一个值中。 如果只想返回几个值,而所有值都属于同一类型,请使用数组。(见Stephen C的回答) 否则,请使用对象。对于您的情况:

    return new int[]{0x80 >> (x % 8), x >> 3});
然后
返回新的内容((char)(0x80>(x%8));,(int)(x>>3))
。 总的来说,这比阵列解决方案要复杂得多,但更难实现
混合返回的两个值;-)

@JavaBits:这是一个更好的问题,谢谢。你的问题真的是“如何从函数中返回多个项?”吗?你的问题是,“我如何改变它,使to_位返回a?你声称通过打印一个字符,你得到24个输出?没有im返回一个int-这就是24个输出。方法内部打印的字符被打印为小方框符号(特殊字符),非常感谢。是的,但由于它是signed类型,所以它在值之前返回负号(-)。如果它真的是位掩码,则存在负号的事实与此无关。您不是将其用作数字:而是将其用作位模式。
    return new int[]{0x80 >> (x % 8), x >> 3});
class MaskAndBits {
      char mask;
      int bits;
      public BitsAndMask(char mask, int bits) {
        this.mask = mask;
        this.bits = bits;
      }
 }