int a[][]=new int[256]所定义数组一个占多少字节
时间: 2023-09-30 12:05:28 浏览: 155
这个二维数组定义中,只给出了第一维的长度,即有256行,但是没有给出第二维的长度,因此这个数组是不完整的,不能被实例化。如果要实例化这个数组,必须给出第二维的长度,比如int a[][]=new int[256][64]。假设完整的定义是int a[][]=new int[256][64],那么这个数组会占用256*64*4=65,536个字节的内存空间,其中4是int类型的字节大小。如果数组定义不完整,那么它是无法占用内存空间的。
相关问题
int a[][]=new int[256][64]
这个二维数组定义中,a是数组名,int表示数组元素为整型,[256][64]表示数组维度,即有256行64列的二维数组。每个元素占用4个字节(int类型的大小),因此这个数组占用的总字节数为256 * 64 * 4 = 65536字节。需要注意的是,Java的多维数组实际上是由一维数组嵌套而成,因此这个二维数组可以看做是由256个一维数组组成,每个一维数组中又有64个元素。
public void init(byte[] eigen,boolean[] sels) { setEigen(eigen); this.Sel_S=sels; for(int i=0;i<8;i++) this.Keyi[i]=new HashSet<Integer>(); for(int i=0;i<8;i++) for(int j=0;j<64;j++) for(int k=0;k<16;k++) this.Sd[i][j][k]=new HashSet<Integer>(); for(int i=0;i<8;i++) for(int j=0;j<64;j++) for(int k=0;k<64;k++) { int t1=(j&0x20)|((j&0x01)<<4)|((j>>1)&0xf); int t2=(k&0x20)|((k&0x01)<<4)|((k>>1)&0xf); this.Sd[i][j^k][S[i][t1]^S[i][t2]].add(j); } }
这段代码是一个类的方法定义,该方法名为 init,接受两个参数,分别是一个字节数组 eigen 和一个布尔数组 sels。该方法的作用是初始化 DES_6R 类的一些属性,以便后续进行加密或解密操作。该方法首先调用 setEigen 方法,将 eigen 数组中的一部分赋值给类中的 Eigen 数组,从而更新了密钥的特征值。接着,该方法将 sels 数组赋值给类中的 Sel_S 数组,从而更新了选择操作的信息。然后,该方法使用三重循环来初始化类中的 Keyi 和 Sd 数组。其中,Keyi 数组是一个长度为 8 的 HashSet 数组,用于存储每一轮加密或解密操作中的轮密钥。Sd 数组是一个 8x64x16 的 HashSet 数组,用于存储每个 S 盒子中的映射结果,以便后续进行加密或解密操作。具体来说,该方法在初始化 Sd 数组时,通过异或操作得到了 S 盒子中两个输入数据之间的差值,并将这个差值作为 S 盒子的输入数据,将 S 盒子的输出结果存储到 Sd 数组中。这样做的目的是为了加速后续的加密或解密操作。
阅读全文