Java 将值映射到整数

Java 将值映射到整数,java,math,Java,Math,我真的很累,所以这可能是一个愚蠢的问题,我只是没有思考清楚。但我正试图基本上做到这一点,这样我就可以绘制地图了 1 => 0 2 => 1 4 => 2 8 => 3 这里的上下文是我有一个数组。然后我传入一个值,如果值的数字是1,我想访问数组偏移0,如果值的宽度是2,偏移1,如果值是4,偏移2,等等 有没有什么数学方法可以让我做得既好又简洁?我觉得用HashMap之类的东西会有点过火,而且我确信有一种比在8个值的数组中查找更好的方法。使用切换循环。 开关(值){ 案例

我真的很累,所以这可能是一个愚蠢的问题,我只是没有思考清楚。但我正试图基本上做到这一点,这样我就可以绘制地图了

1 => 0
2 => 1
4 => 2
8 => 3
这里的上下文是我有一个数组。然后我传入一个值,如果值的数字是1,我想访问数组偏移0,如果值的宽度是2,偏移1,如果值是4,偏移2,等等


有没有什么数学方法可以让我做得既好又简洁?我觉得用HashMap之类的东西会有点过火,而且我确信有一种比在8个值的数组中查找更好的方法。

使用切换循环。

开关(值){
案例1:返回1;
中断;
案例2:返回2;
中断;
案例4:返回3;
中断;
案例8:返回4;
中断;
默认值:返回0;

}在给定模式中映射整数的简单数学方法是
x=>log2(x)
如果模式继续为
16=>4
32=>5
64=>6
等等

大多数语言都有计算标准库中数字对数的方法。如果该方法以2以外的基数计算对数,则可以创建一个辅助方法,将日志计算为以2为基数

float log2(float x) {
    const float logOf2 = log(2);
    return log(x) / logOf2; // log() is your standard library log
}

试试这个。如果数组有错误的数据,可以添加条件以引发异常

public static void main(String[] args) {
            int[] vals = new int[]{1,2,4,8};
            for(int i : vals){
                System.out.println(getResult(i));
            }
        }

    private static int getResult(int element){
        int i = -1;
        int temp = 2;
        while(true){
            i++;
            int result = (int) Math.pow(temp,i);
            if(result == element){
                return i+1;
            }
        }


    }

Aw我希望能有一些奇妙的数学运算,比如%或+或-或其他什么映射背后的逻辑是什么,如果有的话?(在我的映射中稍微编辑一下)所以1,2,4,8是以字节(byte,short,int,long)为单位的类型大小。我把指令存储在一个枚举器中,我想得到movb,它的MOV+0,movs是MOV+1。为了让事情变得更好,我可以使用MOV+get_width(type),其中get_width将处理映射。为什么不使用
sizeof()
?@MBo Java中没有sizeof:-)另外,这在我的上下文中不起作用,因为我没有得到实际值的大小-这是为编译器准备的。