int c = 0; //此处最好采用正则表达来判断a b 的类型0 ,正,负;为了方便我就将就下了,-我也采用了equalsji //建议用正则表达 if(String.valueOf(a).equals("0")&&String.valueOf(b).equals("0")){ System.out.println("a等于b"); } if(!String.valueOf(a).equals("0")&&String.valueOf(b).equals("0")){ if(String.valueOf(a).contains("-")){
public String compare(Integer x,Integer y){ String [] buf={"=>","<"}; int id1=(x-y)>>>31; System.out.println(id1); return buf[id1]; }
int max(int a, int b) { return a+b; } 不过感觉还是会有像LZ说的越界问题
楼主我想说的是用 PS:哥,看到我5#的回复没?不让用类库里的方法 switch (b) {
case 0: case 1: 判断正负 这样不就可以去掉==
用异常应该可以 如下:(效率可能很低,不过觉得结果还是可以的) public class Test { public static void main(String[] args) { int a=1,b=2; Test test=new Test(); test.my_Compare(a,b); } public void my_Compare(int a,int b) { int aa=10,bb=10; while(true) { try { a=a++; aa=aa/a; System.out.println("a="+a); } catch(Exception e) { System.out.println("a 大"); System.exit(0); } try { b=b++; bb=bb/b; System.out.println("b="+b); } catch(Exception e) { System.out.println("b 大"); System.exit(0); } } } }
上面写错了,应该把a=a++改成a++; b=b++改成b++;
基于大家的讨论,我提出个方法boolean[] judge = {true,false}; if(judge[-(int) (((long)a-(long)b)>>63)]) System.out.println("a is the bigger one"); else System.out.println("b is the bigger one");
public void compare(Integer x,Integer y){ String [][]buf={{"=","="},{">","<"}}; int id1=((x-y)^(y-x))>>31; id1=id1*id1; int id2=(x/2-y/2)>>>31; System.out.println(x+buf[id1][id2]+y); }这个应该可以吧~~
?????怎么没出来呢?? 在发一遍 public void compare(Integer x,Integer y){ String [][]buf={{"=","="},{">","<"}}; int id1=((x-y)^(y-x))>>31; id1=id1*id1; int id2=(x/2-y/2)>>>31; System.out.println(x+buf[id1][id2]+y); }可以的话要给分啊,呵呵~
private int a;
public Test1(){
}
public Test1(int c){
this.a=c;
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int i=new Test1(-2147483648).compareTo(2147483647);
if(i>0){
System.out.println("a>b");
}else if(i<0){
System.out.println("a<b");
}else{
System.out.println("a=b");
}
}
public int compareTo(Integer i) {
// TODO Auto-generated method stub
if(a<i)
return -1;
if(a>i)
return 1;
return 0;
}
}
判断的时候建议用下正则---为了速度我用了equals判断
public static void main(String[] args) {
compareTwoInt(23, -45);
}
public static void compareTwoInt(int a, int b){
int c = 0;
//此处最好采用正则表达来判断a b 的类型0 ,正,负;为了方便我就将就下了,-我也采用了equalsji
//建议用正则表达
if(String.valueOf(a).equals("0")&&String.valueOf(b).equals("0")){
System.out.println("a等于b");
}
if(!String.valueOf(a).equals("0")&&String.valueOf(b).equals("0")){
if(String.valueOf(a).contains("-")){
System.out.println("a小于b");
}
System.out.println("a大于b");
}
//b不等于0
if(!String.valueOf(b).equals("0")){
c = a/b;
switch (c) {
case 0:
//a,b 都为正
if(!String.valueOf(a).contains("-")&&!String.valueOf(b).contains("-")){
System.out.println("a小于b");
}
//a 为负,b为负
if(String.valueOf(a).contains("-")&&String.valueOf(b).contains("-")){
System.out.println("a大于b");
}
//a 为负,b为正
if(String.valueOf(a).contains("-")&&!String.valueOf(b).contains("-")){
System.out.println("a小于b");
}
// b 为负,a为正
if(!String.valueOf(a).contains("-")&&String.valueOf(b).contains("-")){
System.out.println("a大于b");
}
break;
case 1:
//a/b=1的情况有a>b(a/b=1.32...)存在
//a 为负,b为正
if(String.valueOf(a).contains("-")&&!String.valueOf(b).contains("-")){
System.out.println("a小于b");
}
// b 为负,a为正
if(!String.valueOf(a).contains("-")&&String.valueOf(b).contains("-")){
System.out.println("a大于b");
}
if(String.valueOf(a).equals(String.valueOf(b))){
System.out.println("a等于b");
}
else{
System.out.println("a大于b");
}
break;
default:
//a 为负,b为负
if(String.valueOf(a).contains("-")&&String.valueOf(b).contains("-")){
System.out.println("a小于b");
}
// a 为负,b为正
if(String.valueOf(a).contains("-")&&!String.valueOf(b).contains("-")){
System.out.println("a小于b");
}
// b 为负,a为正
if(!String.valueOf(a).contains("-")&&String.valueOf(b).contains("-")){
System.out.println("a大于b");
}
else{
System.out.println("a大于b");
}
}
}
}
String [] buf={"=>","<"};
int id1=(x-y)>>>31;
System.out.println(id1);
return buf[id1];
}
return a+b;
}
不过感觉还是会有像LZ说的越界问题
楼主我想说的是用
PS:哥,看到我5#的回复没?不让用类库里的方法
switch (b) {
case 0:
case 1:
判断正负
这样不就可以去掉==
用异常应该可以
如下:(效率可能很低,不过觉得结果还是可以的)
public class Test
{
public static void main(String[] args)
{
int a=1,b=2;
Test test=new Test();
test.my_Compare(a,b);
}
public void my_Compare(int a,int b)
{
int aa=10,bb=10;
while(true)
{
try
{
a=a++;
aa=aa/a;
System.out.println("a="+a);
}
catch(Exception e)
{
System.out.println("a 大");
System.exit(0);
}
try
{
b=b++;
bb=bb/b;
System.out.println("b="+b);
}
catch(Exception e)
{
System.out.println("b 大");
System.exit(0);
}
}
}
}
b=b++改成b++;
if(judge[-(int) (((long)a-(long)b)>>63)])
System.out.println("a is the bigger one");
else
System.out.println("b is the bigger one");
String [][]buf={{"=","="},{">","<"}};
int id1=((x-y)^(y-x))>>31;
id1=id1*id1;
int id2=(x/2-y/2)>>>31;
System.out.println(x+buf[id1][id2]+y);
}这个应该可以吧~~
在发一遍 public void compare(Integer x,Integer y){
String [][]buf={{"=","="},{">","<"}};
int id1=((x-y)^(y-x))>>31;
id1=id1*id1;
int id2=(x/2-y/2)>>>31;
System.out.println(x+buf[id1][id2]+y);
}可以的话要给分啊,呵呵~
min(a,b)=(a+b-abs(a-b))/2
1判断a和b是否相等if(a==b) 结束;else 进入2中;
2判断a和b的符号是否相同?
if((a^b)>>31) System.out.print("a和b是同号的");
else a和b异号
3当 a和b异号 的时候
if(a>>31) System.out.print("a大于b");
else System.out.print("b大于a");4当 a和b同号的时候
(1).if(a>>31) System.out.print("a和b是非负的");
int c=a-a&b;
int d=b-a&b;
for(int k=1;k<=32;k++)
{
if(c>>k) {System.out.print("a大于b");break;}
if(d>>k) {System.out.print("b大于a");break;}
} (2).else
{
int x=~a;
int y=~b;
调用 4(1),当x大于y,a小于b,当y大于x时,a大于b;
}
for(int k=32;k!=0;k--)给忘了不能用比较运算符 呵呵也不知道对么?
int max(int x, int y){
int[] buf = {x, y};
return buf[y/x];
}
这里有答案
intArray[1] = b ;int index = (a - b) >>> 31 ;intArray[index] 就是那个最大的值
a = a>>31;
if(a)
printf("a<b \n");
else
printf("a>=b\n");
如涉及溢出问题可以改成int id1 =(int)((long)x-y>>>63);
8 {
9 int a=2, b=3;
10 int c;
11
12 c = a-b;
13 c = c>>31;
14 if(c)
15 printf("a<b \n");
16 else{
17 c = b-a;
18 c = c>>31;
19 if(c)
20 printf("a>b\n");
21 else
22 printf("a==b\n");
23 }
24
25 return 0;
26 }
#include<stdio.h>
void main()
{int a=20;
int b=5;
int max=((a-b)>>31)*b+((b-a)>>31)*a;/*是这样改写的吗?如果是,我运行出来的全都是带负号*/
printf("%d",max);
}
如果不是,请高手指点。
/*
返回值:
>0 x > y
0 x == y
<0 x < y
*/
int compare(int x, int y)
{
int tmp = x - y;
if ( (x >> 31) ^ (y >> 31))
{
if ((x >> 31) ^ (tmp >> 31))
{
return ~tmp;
}
else
{
return tmp;
}
}
else
{
return tmp;
}
}
int[] max = { a, b };
return max[-((a - b) >> 31)];
}
http://heisetoufa.javaeye.com/blog/227687
public static void main(String[] args) {
compareTwoInt(0, 0);
compareTwoInt(-12, -11);
compareTwoInt(-12, 0);
compareTwoInt(0, 0);
compareTwoInt(2, 2);
compareTwoInt(-12, -12);
compareTwoInt(-2, 3);
compareTwoInt(3, -3);
compareTwoInt(3, -2);
compare(1,0);
}
/**
* 判断正负 true>0
*
* @param a
* @return
*/
public static boolean parserInt(int a) { switch (a >>> 31) {
case 0:
return true;
case 1:
return false;
default:
return false;
} } /**
* 判断是否为0
*
* @param a
*
*/
public static boolean parserIntZero(int a) { switch (a) {
case 0:
return true;
default:
return false;
} } public static void compareTwoInt(int a, int b) { int c = 0;
// 此处最好采用正则表达来判断a b 的类型0 ,正,负;为了方便我就将就下了,-我也采用了equalsji
// 建议用正则表达
if (parserIntZero(a) && parserIntZero(b)) {
System.out.println("a等于b");
}
if (!parserIntZero(a) && parserIntZero(b)) {
if (!parserInt(a)) { System.out.println("a小于b");
}else{
System.out.println("a大于b");
}
}
// b不等于0
if (!parserIntZero(b)) {
c=a/b;
switch (c) { case 0:
// a,b 都为正
if (parserInt(a) && parserInt(b)) {
System.out.println("a小于b");
}
// a 为负,b为负
if (!parserInt(a) && !parserInt(b)) {
System.out.println("a大于b");
}
// a 为负,b为正
if (!parserInt(a) && parserInt(b)) {
System.out.println("a小于b");
}
// b 为负,a为正
if (parserInt(a) && !parserInt(b)) {
System.out.println("a大于b");
}
break;
case 1: // a 为负,b为正
if (!parserInt(a) && parserInt(b)) {
System.out.println("a小于b");
}
// b 为负,a为正
if (parserInt(a) && !parserInt(b)) {
System.out.println("a大于b");
}
// a/b=1的情况有a>b(a/b=1.32...)存在
else {
// 获得余数
int m = a % b;
switch (m) {
case 0:
System.out.println("a等于b");break;
default:
// a 为负,b为负
if (!parserInt(a) && !parserInt(b)) {
System.out.println("a小于b");
}
// a,b 都为正
if (parserInt(a) && parserInt(b)) {
System.out.println("a大于b");
}
break;
}
} break;
default:
// a 为负,b为负
if (!parserInt(a) && !parserInt(b)) {
System.out.println("a小于b");
}
// a 为负,b为正
if (!parserInt(a) && parserInt(b)) {
System.out.println("a小于b");
}
// b 为负,a为正
if (parserInt(a) && !parserInt(b)) {
System.out.println("a大于b");
} else {
System.out.println("a大于b");
}
}
} }
把他们放在数组里面一个排序Array.sort不就好了嘛