gpt4 book ai didi

java - 使用移位运算符理解 java 数组初始化

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:59:47 27 4
gpt4 key购买 nike

我知道 java 中任何数组的最大大小都是 Integer.maxValue。因为数组是 int 索引的。但我知道,我们也可以使用移位运算符来初始化数组。我试过了,但它会抛出奇怪的输出。

        int arr[] = new int[1<<5];
System.out.println(arr.length);
arr = new int[1<<10];
System.out.println(arr.length);
arr = new int[1<<20];
System.out.println(arr.length);
arr = new int[1<<25];
System.out.println(arr.length);
arr = new int[1<<40];
System.out.println(arr.length);
arr = new int[1<<111];
System.out.println(arr.length);

我预计每移动 n 次,数组的最终大小将是 2^n。

但是输出如下-

32
1024
1048576
33554432
256
32768

那么如果有任何其他方法可以在适当的大小分配中初始化像这样的数组,是否可以通过移动 1 100 次来初始化大小为 2^100 的数组?

最佳答案

你看到了System.out.println(1 << 40);版画 256因为溢出。在 Java 中 int溢出所以Integer.MAX_VALUE + 1等于 Integer.MIN_VALUE .

你可以尝试做这样的事情:

int[] arr = new int[1 << 100];

但是因为两个操作数的类型都是int那么结果也将是int .由于溢出,它将不是 2^100,而是 16。

如果您尝试让 JVM 将结果转换为 long执行以下操作

int[] arr = new int[1L << 100];

你会得到编译错误,因为数组的长度应该是 int 类型.

关于java - 使用移位运算符理解 java 数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57715382/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com