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