概述
技术栈PHP
/**
* 将 val 恢复成合并前的两个数
* @param int $val 合并后的数
* @return array 合并 $val 前的两个数
*/
function split_num(int $val): array
{
$left = $val >> 32;
$right = ($val << 32) >> 32;
return [$left, $right];
}
/**
* 将合并 left,right 成一个数
* @param int $left
* @param int $right
* @return int $result 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]);
}
/**
* 将 val 恢复成合并前的两个数
* @param val 合并后的数
* @return 合并 val 前的两个数
*/
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()};
}
/**
* 将合并 left,right 成一个数
* @param left 用于合并的数1
* @param right 用于合并的数2
* @return left,right 合并后的数
*/
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;
}
/**
* 输出 val 的二进制值信息
* @param prefix 输出日志前缀
* @param val 要输出二进制的值
*/
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());
}
}
最后
以上就是淡然超短裙为你收集整理的PHP 两个数字合并成一个数字,且可以恢复成原来的两个数字的全部内容,希望文章能够帮你解决PHP 两个数字合并成一个数字,且可以恢复成原来的两个数字所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复