zoukankan      html  css  js  c++  java
  • 如何将多个小值存储进一个值中

    群里发面试题来看,无意之后看到。自己思考了一下觉得位运算就可以搞定。

    题意大概就是让你可以有一个方法对三个数进行encode之后存储进一个数。然后有一个decode方法能将这三个数从这一个数中还原回来。

    go实现:

    package main
    
    import "fmt"
    
    func encodeIntoHex(m map[string]int) (int) {
        data := 0
        data = m["orange"] & 0xff | m["banana"] & 0xff << 8 | m["apple"] & 0xff << 16
        return data
    }
    
    func decodeIntoInt(i int) (int, int, int) {
        orange := i & 0xff
        banana := i >> 8 & 0xff
        apple := i >> 16 & 0xff
        return orange, banana, apple
    }
    
    
    func main() {
        fruit := map[string]int {
            "orange": 3,
            "banana": 4,
            "apple": 5,
        }
        data := encodeIntoHex(fruit)
        fmt.Println(data)
        o, b, a := decodeIntoInt(data)
        fmt.Println(o, b, a)
    }

    总的来说,思路还是位运算。我们假设这个数是0-255的一个数。我们就可以使用每8bit来标示一个数。我们用一个32bit int型来存储最后的数。

    这里假设我们有三个数,encode的时候将数按顺序,每个数与0xff与,然后在另外一个8bit位置上与另外一个数字或,即可得到结果。

    在decode的时候可以再按照每一位解析回来即可。

  • 相关阅读:
    云时代架构阅读笔记一——架构师必备最全SQL优化方案
    虚拟机VMware安装Ubuntuix
    假期周总结八
    虚拟机VMware安装Kali Linux
    codeforces 401D (数位DP)
    2014 多校联合训练赛6 Fighting the Landlords
    lightoj 1224
    lightoj 1020 (博弈)
    lightoj 1019
    lightoj 1018 (状态压缩DP)
  • 原文地址:https://www.cnblogs.com/piperck/p/6708746.html
Copyright © 2011-2022 走看看