面试题目

问题1:

判断一个int类型的数是否是2的幂。

2进制,位运算 a&(a-1) == 0.

在二进制数中,若2的k次方等于n,则n只有最高位为1,其他位为0,故(n-1)的最高位为0(相对于n来说),其他位为1,
因此判断一个数是否是2的幂,只需判断n & (n-1)是否为0,若为0,则是2的幂,否则,不是2的幂。


问题2:

计算器出错:把所有的‘0’都变成了‘*’,而且不能智能的消除小数点数字后多余的0, 比如100.00100写成了1**.**1**,现在要求编程序转换回来,并消除小数点后多余的零。 
如输入:1.**1** ;输出:1.001

private String castNumber(String num) {
        boolean isDivide = false;
        char[] bytes = num.toCharArray();
        for (int i = 0; i< bytes.length; i++) {
            if ((bytes[i] == '.')) {
                isDivide = true;
            }
            if(bytes[i] == '*') {
                bytes[i] = '0';
            }
        }
        if (isDivide) {
            int numberOfZero = 0;
            int offset = bytes.length - 1;
            while (bytes[offset] == '0' || bytes[offset] == '.') {
                numberOfZero++;
                offset--;
            }
            char[] cast = new char[bytes.length - numberOfZero];
            System.arraycopy(bytes, 0, cast, 0, cast.length);
            return new String(cast);
        }
        return new String(bytes);
    }

其他思想:首先判断str的数是否是小数,如果不是则将str的‘*’全部替换为‘0’即可,如果是,从str的末尾开始遍历,首先将遇到的‘*’全部剔除,下一步如果遇到'.',则将'.'也剔除,否则将从这一位到str[0]的所有字符为'*'的用‘0’代替,输出str即可。


问题3:

1.获得int型最大值:

(1<<31)-1);//2147483647
~(1<<31);//<span style="font-family: Arial, 'Hiragino Sans GB', STHeiti, 'Microsoft YaHei', simsun, sans-serif;">2147483647</span>

2.获得int型最小值:

1<<31;//-<span style="font-family: Arial, 'Hiragino Sans GB', STHeiti, 'Microsoft YaHei', simsun, sans-serif;">2147483648</span>

3.乘以2:

n<<1;//乘以2

4.除以2:

n>>2;//除以2

5.乘以2的m次幂:

n<<m;//<span style="font-family: Arial, 'Hiragino Sans GB', STHeiti, 'Microsoft YaHei', simsun, sans-serif;">乘以</span><span style="line-height: 2em; font-family: Arial, 'Hiragino Sans GB', STHeiti, 'Microsoft YaHei', simsun, sans-serif;">2的m次幂</span>

6.除以2的m次幂:

n>>m;//<span style="font-family: Arial, 'Hiragino Sans GB', STHeiti, 'Microsoft YaHei', simsun, sans-serif;">除以</span><span style="line-height: 2em; font-family: Arial, 'Hiragino Sans GB', STHeiti, 'Microsoft YaHei', simsun, sans-serif;">2的m次幂</span>

7.判断一个数的奇偶性:

n&1==1

8.不用临时变量交换两个数:

private void swap(int a, int b) {
        a ^= b;
        b ^= a;
        a ^= b;
        ...
    }
a^=b等价于a = a^b,其中^是位异或运算,即将a与b的对应位进行异或运算,同为0或者同为1时,对应位结果为0;否则为1。

9.int到数组

char[] numbers = Integer.toBinaryString(random).toCharArray();

10.判断符号是否相同

x^y>0;//符号相同大于0,相反小于0












你可能感兴趣的:(面试题目)