栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

PHP 两个数字合并成一个数字,且可以恢复成原来的两个数字

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PHP 两个数字合并成一个数字,且可以恢复成原来的两个数字

技术栈PHP

function split_num(int $val): array
{
    $left = $val >> 32;
    $right = ($val << 32) >> 32;
    return [$left, $right];
}


function merge_num(int $left, int $right): int
{
    if ($left < 0 || $right < 0) {
        //不支持负数合并
        throw new RuntimeException("not support negative to merge ");
    }
    if ($left > 2147483647 || $right > 2147483647) {
        //不支持负数合并
        throw new RuntimeException("The maximum value that is not supported");
    }
    $result = $left;
    $result <<= 32;
    $result |= $right;
    return $result;
}

技术栈JAVA

package com.worker;

public class AlgorithmTest {
    public static void main(String[] args) {
        test(Integer.MAX_VALUE,Integer.MAX_VALUE);
        test(123,143);
    }

    private static void test(int left ,int right){
        System.out.println("------test["+left+","+right+"]------");
        outBinary("left",left);
        outBinary("right",right);
        System.out.println("变化后的left" + left);
        System.out.println("变化后的right" + right);
        long mergeNum= mergeNum(left,right);
        outBinary("mergeNum",mergeNum);
        int[] splitNums = splitNum(mergeNum);
        System.out.printf("------mergeNum=%d,splitNum=[%d,%d]rn",mergeNum,splitNums[0],splitNums[1]);
    }

    
    private static int[] splitNum(long val){
        long left=val>>32;
        long right=(val<<32)>>32;
        return new int[]{Long.valueOf(left).intValue(),Long.valueOf(right).intValue()};
    }

    
    private static long mergeNum(int left, int right){
        if(left<0||right<0){
            //不支持负数合并
            throw new RuntimeException("not support negative to merge ");
        }
        long result=left;
        result<<=32;
        result|=right;
        return result;
    }

    
    private static void outBinary(String prefix,long val){
        System.out.println(prefix+".val="+val);
        StringBuilder sb=new StringBuilder();
        int n=Long.numberOfLeadingZeros(val);
        for (int i = 0; i < n; i++) {
            sb.append(0);
        }
        String valBinaryStr=Long.toBinaryString(val);
        sb.append(valBinaryStr);
        System.out.println(prefix+".valBinaryStr = "+valBinaryStr);
        System.out.println(prefix+".valBinaryStr.length = "+valBinaryStr.length());
        System.out.println(prefix+".sb.toString() = "+sb.toString());
        System.out.println(prefix+".sb.length() = "+sb.length());
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/771082.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号