两个字符串
String s1="11101001010100100101001011010010101111"[十进制度超过30位]
String s2="10001001010111111111001011010010101010"
java的
int型范围是-2147483648~2147483647(二进制有32位)
long型范围是-9223372036854775808~9223372036854775807[十进制20位左右](二进制有64位)请问:
在java里有办法使s1和s2分别转换为二进制的
11101001010100100101001011010010101111和
10001001010111111111001011010010101010,然后进行按位与(|)运算吗?有谁能帮帮我啊...

解决方案 »

  1.   

    我开始想将s1,s2想通过Interger.parseInt()或Long.valueOf()方法,转化为int型或long型的十进制数,然后在将十进制数转换为二进制,可是位数太多,可能超过int或long的表示范围,是这样吗?
      

  2.   

    弄错了,如果"11101001010100100101001011010010101111"算是十进制的书,好象有个Interger.parseInter(s1,2)可以将十进制转化为二进制,可转换的数肯定不是11101001010100100101001011010010101111,我想得到二进制数11101001010100100101001011010010101111.
      

  3.   

    用字符串计算算了:
    /**
     * 取两长二进制数位与
     * @param s1
     * @param s2
     * @return
     * @author seany
     */
    public String getResult(String s1, String s2)
    {
    if(s1 == null || s2 == null)
    return ""; //字符串为空
    if(!s1.matches("[01]*") || !s2.matches("[01]*"))
    return "0"; //字符串有非01字符
    int max = s1.length() > s2.length() ? s1.length() : s2.length();
    if(s1.length()< max)
    {
    for(int i=0;i<max-s1.length();i++)
    s1 = "0" + s1;
    }
    if(s2.length()< max)
    {
    for(int i=0;i<max-s2.length();i++)
    s2 = "0" + s2;
    }
    String str = "";
    for(int i=0;i<max;i++)
    {
    int m = Integer.parseInt(s1.substring(i, i+1));
    int n = Integer.parseInt(s2.substring(i,i+1));
    str += m|n;
    }
    return str;
    }
      

  4.   

    你确定转是换成10进制后超过30位,而不是仅仅二进制超过30位吗?那样的话,与其想破了脑袋,还不如就手工写了:
    public class Test {
    public static void main(String args[]) {
    String s1="11101001010100100101001011010010101111";
    String s2="10001001010111111111001011010010101010";
    String s3 = XOR(s1, s2);
    System.out.println("s1 = " + s1);
    System.out.println("s2 = " + s2);
    System.out.println("s3 = " + s3);
    }

    public static String XOR(String s1, String s2) {
    char result[] = new char[s1.length()];
    for(int i = 0; i < s1.length(); ++i) {
    result[i] = s1.charAt(i) == s2.charAt(i) ? '0' : '1';
    }
    return new String(result);
    }
    }
      

  5.   

    import java.math.BigInteger;public class Test {
    public static void main(String args[]) {
    String s1="11101001010100100101001011010010101111";
    String s2="10001001010111111111001011010010101010";
    BigInteger bi1 = new BigInteger(s1, 2);
    BigInteger bi2 = new BigInteger(s2, 2);
    BigInteger bi3 = bi1.xor(bi2);
    String s3 = bi3.toString(2);
    System.out.println("s1 = " + s1);
    System.out.println("s2 = " + s2);
    System.out.println("s3 = " + s3);
    }
    }
      

  6.   

    不愧是高手啊,steedhorse(晨星)的方法不错,那样就要作成一个javabean了,
    daniel_kaka()你的意思是把s1转换成BigInteger吗,然后呢,不太懂,能指点下吗.
      

  7.   

    厉害。。lz的意思应该是用
    BigInteger bi3 = bi1.or(bi2);吧,不是XOR?
      

  8.   

    BigInteger  bi3  =  bi1.or(bi2);
    行吗?
      

  9.   

    看样子要写个javabean了,我的s1,s2是从数据库表的获取的,有点麻烦.
      

  10.   

    String s1="11101001010100100101001011010010101111";
    String s2="10001001010111111111001011010010101010";
    BigInteger bi1 = new BigInteger(s1,2);
    BigInteger bi2 = new BigInteger(s2,2);
    System.out.println("s1 = " + bi1.doubleValue());
    System.out.println("s2 = " + bi2.doubleValue());

    BigInteger bi3 = bi1.or(bi2);
    System.out.println("s2 = " + bi3.toString(2));
      

  11.   

    System.out.println("s3 = " + bi3.toString(2));
    输出结果:
    s3 = 11101001010111111111001011010010101111
    没问题吧。
      

  12.   

    哦,对,我没看清楚。
    写的两个程序全按xor处理了,呵呵。楼主自己改改吧。
      

  13.   

    Byte.parse("01010101010101010101001010101010100101001111111",2)