62,610
社区成员
发帖
与我相关
我的任务
分享
private static int dig [] = new int[]{1,2,4,8,0x10,0x20,0x40,0x80,
0x100,0x200,0x400,0x800,0x1000,0x2000,0x4000,0x8000,
0x10000,0x20000,0x40000,0x80000,0x100000,0x200000,0x400000,0x800000,
0x1000000,0x2000000,0x4000000,0x8000000,0x10000000,0x20000000,0x40000000,0x80000000};
public static int swapIntDigital(int num,int i,int j){
if(i!=j){
int ti=num&dig[i];
int tj=num&dig[j];
num=ti>0?num|dig[j]:num&~dig[j];
num=tj>0?num|dig[i]:num&~dig[i];;
}
return num;
}
public class Test04 {
/**
* @param position 0从低位算起, 1从高位算起(不包括前导0,即实际有效位), 索引从0开始算起
* @param n 要交换位置的整数
* @param i 位置i
* @param j 位置j
* @return
*/
public static int bitMove(int position, int n, int i, int j) {
if (i < 0 || i > 31 || j < 0 || j > 31 || i == j) return n;
if (position == 0) {
return ((n >> i & 1) << j) | ((n >> j & 1) << i) | (n & (-1 ^ ((1 << i) | (1 << j))));
} else if (position == 1) {
int offsetNum = 0;
if (n>0) {
while ((n << ++offsetNum) > 0) {
}
}
i+=offsetNum;
j+=offsetNum;
System.out.println("i=" + i + ", j=" + j);
return ((n >> 31-i & 1) << 31-j) | ((n >> 31-j & 1) << 31-i) | (n & (-1 ^ ((1 << 31-i) | (1 << 31-j))));
}
return n;
}
public static void main(String[] args) {
int a = -9633214;
int b = 123456789;
System.out.println(Integer.toBinaryString(a));
System.out.println(Integer.toBinaryString(b));
System.out.println(Integer.toBinaryString(bitMove(0, a,8,9)));
System.out.println(Integer.toBinaryString(bitMove(1, a,8,9)));
System.out.println(Integer.toBinaryString(bitMove(0, b,2,1)));
System.out.println(Integer.toBinaryString(bitMove(1, b,5,6)));
}
}
public class Test04 {
public static int bitMove(int n, int i, int j) {
return ((n >> i & 1) << j) | ((n >> j & 1) << i) | (n & (-1 ^ ((1 << i) | (1 << j))));
}
public static void main(String[] args) {
int a = 85;
int b = 123456789;
System.out.println(Integer.toBinaryString(a));
System.out.println(Integer.toBinaryString(b));
System.out.println(Integer.toBinaryString(bitMove(a,2,1)));
System.out.println(Integer.toBinaryString(bitMove(b,1,0)));
}
}
public class SwapBit {
/**
* @param args
* author hanmeng 2008-7-16
*/
public static void main(String[] args) {
int m = -9633214;
int n = swap(m, 22, 1);
System.out.println(Integer.toBinaryString(m));
System.out.println(Integer.toBinaryString(n));
}
public static int swap(int num, int i, int j) {
int a = (num >> i) & 1;
int b = (num >> j) & 1;
System.out.println("a="+a+" "+"b="+b);
int flag = a^b;
if(flag==1)
{
num ^= 1<<i;
num ^= 1<<j;
}
return num;
}
}
public class ReplaNum {
public static void main(String[] args) {
ReplaNum re = new ReplaNum();
System.out.println(re.Replacement(123316711,1,6)); //1,6表示第1位与第6为交换
}
//int i,int j 为交换的参数
public int Replacement(Integer num,int i,int j){
String charnum = num.toString();//把num转变成字符串。
int temp = 0; //空桶
int [] arr = new int [charnum.length()];
if(i>charnum.length()||j>charnum.length()){
System.out.println("超出范围");
return 0;
}
i=i-1;
j=j-1;
if(i<0||j<0){
System.out.println("交换参数不能小与0");
return 0;
}
for(int z = 0;z<charnum.length();z++){ //把num拆分并存放数组中
arr[z] =Integer.valueOf(charnum.substring(z,z+1));
}
temp = arr[i];
arr[i]=arr[j];
arr[j]=temp;
//arr to String
charnum="";
for(int z = 0;z<arr.length;z++ ){
charnum+=arr[z];
}
return Integer.valueOf(charnum);
}
}
/** i ,j 从0开始计算
* @param value 要交换得值
* @param i 第i位
* @param j 第j位
* @return 交换i,j位后得整数值
*/
public int swap(int value,int i,int j){
if(i<j){
i = i + j;
j = i - j;
i = i - j;
}
int mask_i = value & (1<<i);
int mask_j = value & (1<<j);
value = (value | (mask_i>>i-j)) & ((mask_i>>i-j)|(0xffff^mask_j));
value = (value | (mask_j<<i-j)) & ((mask_j<<i-j)|(0xffff^mask_i));
return value;
}