8月26日华为笔试第一题移位32位无符号整数用java怎么写

我转位long最后输出是一个负数,取绝对值多了1,有人用java 写完的吗#华为#
全部评论
private static void first(int[] arr) {         for(int i = 0; i < arr.length; i++) {             arr[i] = cal(arr[i]);         }         int lowBits = arr[arr.length - 1] & 3;         for(int i = 0; i < arr.length; i++) {             int temp = arr[i] & 3;             arr[i] = (arr[i] >>> 2) ^ (lowBits << 30);             lowBits = temp;         }     }     private static int cal(int n) {         int first = (0x55555555 & n) << 1;         int second = (0xAAAAAAAA & n) >>> 1;         return first ^ second;     }
3 回复 分享
发布于 2020-08-26 22:49
public class Solution {     public static void main(String[] args) {         Scanner sc = new Scanner(System.in);         String line = sc.nextLine();         String[] split = line.split(" ");         StringBuilder sb = new StringBuilder();         for(int i=0; i<split.length; i++){             int t = Integer.parseInt(split[i]);             int even = t&0xaaaaaaa;             int base = t&0x55555555;             //拼接             t = even>>1 | base <<1;             String temp = Integer.toBinaryString(t);             String str1 = "";             for(int j=0; j<32-temp.length(); j++){                 str1 += "0" ;             }             sb.append(str1+temp);         }         String str = sb.substring(sb.length()-2);         String res = str + sb.substring(0,sb.length()-2);         System.out.println(res);         for(int i=0; i<split.length; i++){             System.out.print(Long.valueOf(res.substring(32*i,32*i+32),2));             System.out.print(" ");         }     } }
3 回复 分享
发布于 2020-08-27 00:34
我这个,虽然很暴力
2 回复 分享
发布于 2020-08-26 21:53
我用位运算做的, 1.交换的处理:使用16个01组成的long 取出奇位数 为x 使用16个10取出偶位数 为y,然后x<<1|y>>>1 2.右移溢出的处理:拿0B11取出最低两位为x,last=x<<1移到最高两位 对于每个新的数字num num>>>2|last即可,last是上一个数计算出来的。
2 回复 分享
发布于 2020-08-26 22:01
同不知道
点赞 回复 分享
发布于 2020-08-26 21:45
有,但是没拍答案,可能是边界没考虑清楚吧
点赞 回复 分享
发布于 2020-08-26 21:46
直接用long就行了
点赞 回复 分享
发布于 2020-08-26 23:14
long类型和0xFFFFFFFF或运算一下,就能得到结果了,不然负数前面都是1
点赞 回复 分享
发布于 2020-08-26 23:52
从一开始就换成二进制字符串表示
点赞 回复 分享
发布于 2020-08-27 08:18
移位计算的时候 (long)2<<位数,2要转成long,昨天没想到这个问题也没AC  难受。。。😣
点赞 回复 分享
发布于 2020-08-27 10:14
移位的时候不需要考虑符号位,最后输出的时候用Integer.toUnsignedLong()或者Integer.toUnsignedString()就可以了
点赞 回复 分享
发布于 2020-08-27 13:20
请问有没有第一题的表述,当时看不懂,现在想再试试
点赞 回复 分享
发布于 2020-08-28 23:01

相关推荐

程序员鼠鼠_春招版:都很烂大街,rpc也基本没人问,考研吧,不然就包装一段实习再去
点赞 评论 收藏
分享
评论
3
10
分享

创作者周榜

更多
牛客网
牛客企业服务