上面的都好短。 public class TestAbs { public static void main(String args[]){ int temp = - 8; int out = temp; temp = temp >> 31; out = out ^ temp; out = out - temp; System.out.println(out); } }
贴好看点public class TestAbs { public static void main(String args[]){ int temp = - 8; int out = temp; temp = temp >> 31; out = out ^ temp; out = out - temp; System.out.println(out); } }
int i=-?; int j=(i*i)/(-i); System.out.println(j);
在简单些就是int i=-?; int j=(-i); System.out.println(j);
public static int abs(int num) { return num * (1 - ((num >>> 31)<<1)); }
public class TestAbs {
public static void main(String args[]){
int temp = - 8;
int out = temp;
temp = temp >> 31;
out = out ^ temp;
out = out - temp;
System.out.println(out);
}
}
public static void main(String args[]){
int temp = - 8;
int out = temp;
temp = temp >> 31;
out = out ^ temp;
out = out - temp;
System.out.println(out);
}
}
int i=-?;
int j=(i*i)/(-i);
System.out.println(j);
int j=(-i);
System.out.println(j);
return num * (1 - ((num >>> 31)<<1));
}
(num^-(num>>>31))+(num>>>31)
(num^(num>>31))-(num>>31)
没必要这样整人吧···
1:异或
2:移位
3:转String 用indexOf(“-”)
在SubString截取 再转回去
我把原理说一下.
num>>31:如果num是负数,num>>31的结果是-1.如果num是非负数,num>>31为0num^(num>>31):num如果是负数,相当于num^-1(-1在内存是0xffffffff),结果就是把num各位取反,再加1就是原来负数对应的正数.加1操作是由-(num>>>31)实现的.这个办法是负数在内存中的存贮是补码形式,这个原理的体现.
当num为正数时,num^(num>>31)相当于num^0,结果就是num.再-(num>>31),也就是-0.结果还是num.借助于一个中间变量,可以只用两个位运算和一个减法运算来完成题目的要求。也借助,也可以用三个位运算和一个减运算来完成。
我来解释一下吧:num>>>31 得到的是num的符号位。num为负则num>>>31=0;否则num>>>31=1;(num>>>31)<<1 相当于将 num>>>31 乘以2.1- ((num>>>31) < <1) 的作用是将 ((num>>>31) < <1)由0变为1,或者由1变为-1;经过1- ((num>>>31) < <1) 的变换后,如果Num为负,则表达式的结果为-1;否则为1。num* (1- ((num>>>31) < <1))的意思也就明确了……
他规定中可以用+,-,*,/的
那么就很简单了
int i=-9;
int j=-i;
这样不就行了?为什么还要位移?
public class Test {
public static void main(String[] args) {
int i=-2;
i = i<<1>>1;
System.out.println(i);
}
}
String str=String.valueOf(test);
str=str.startsWith("-")?str.split("-")[1]:str;
test=Integer.parseInt(str);
System.out.println(test);
public static int myabs(int num){
return (num < 0) ? -num : num;
}
只会这个... 汗..
public class AbsCal { public static void main(String[] args) {
for(int i=-10; i<10; i++)
System.out.println("abs("+i+") = "+abs(i));
}
public static int abs(int num) {
return ~num +1;
}}
不会是用了位运算吧?
如果 i 为正数 : i >> 31 结果为 0, 0 | 1 = 1, i * 1 结果为正i.
如果 i 为0 : 结果肯定是0啦。