2011-04-08 35 views
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 
} 

對於該方法的解釋和例子請參見 Explain the following C++ method轉換(返回在Java多個值)

我寫了下面的方法,在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); 

} 

} 

我們可以採取屏蔽的輸出入位集合對象。 我收到了把爲(特殊字符輸出的字符字段)

請建議還如何讓這兩個性格和整數值。謝謝

+1

@JavaBits:這是一個更好的問題,謝謝。 – 2011-04-08 13:37:55

+0

真的是你的問題:「我如何從一個函數返回多個項目?」。 – 2011-04-08 13:37:59

+0

是你的問題,「我如何改變這個以使to_bits返回一個[BitSet](http://download.oracle.com/javase/1.4.2/docs/api/java/util/BitSet.html)? – razlebe 2011-04-08 13:41:16

回答

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等效,則最接近的是Java byte類型 - 一種帶符號的8位類型。


在進一步思考,最簡單的方法是做計算給你int值;例如

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

並具有呼叫者鑄造任一值,以如果需要一些其它類型的

假設這些值旨在用於按位操作,它們可能看起來爲爲負的事實是無關緊要的......假設位模式是正確的。請記住,它們是位模式而不是數字。如果出現混淆,請使用Integer.toHexString(...)Integer.toBinaryString(...)以無符號形式打印出來。

+0

非常感謝,但是因爲它的類型簽署了它的返回負號( - ) – JavaBits 2011-04-08 14:00:54

+0

如果它實際上是一個掩碼,那麼有一個負號的事實是不相關的,你並沒有將它用作一個數字:你正在使用它作爲一個位模式 – 2011-04-09 01:08:30

0

如果不考慮符號,這可能很有用。否則,我們可以堅持到字符。

// char mask =(char)(0x80 >>(x%8)); 字節掩碼=(字節)(0x80 >>(x%8)); System.out.println(Integer.toString(mask,2));

輸出:1 24

+0

感謝Stephen C. – JavaBits 2011-04-08 14:08:31

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))。 總體來說這是比陣列解決方案類型更多,但它更難以 混合了返回的兩個值;-)