「字节java算法」java 字节和字符

博主:adminadmin 2022-12-24 23:39:09 71

本篇文章给大家谈谈字节java算法,以及java 字节和字符对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

用java设计一个程序算法,实现下列功能:输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证

已经测试通过

public class SplitIt {

public static void main(String[] args) {

String str = "我ABC汉DEF";

int a = 6;

excute(str,a);

}

private static void excute(String str, int a) {

String temp = "";

int k = 0;

for (int i = 0; i str.length(); i++) {

byte[] b = (str.charAt(i) + "").getBytes(); //每循环一次,将str里的值放入byte数组

k = k + b.length;

if (k a) { //如果数组长度大于6,随机跳出循环

break;

}

temp = temp + str.charAt(i); //拼接新字符串

}

System.out.println(temp);

}

}

java :DES算法中的明文有64位,请问这64是代表64个字节(意思是有64个byte类型),还是八个字节?

DES是块加密算法,每个块64bit或8个bytes,密钥长56bit或7bytes

java字符串按目标编码转换成字节,然后在每8个字节截取成块。余部不足8个字节时有多种补齐方法标准。常见的补齐方法比如定义在PKCS5/7中的。这些是在自己实现DES才涉及到。

byte a[]="你好".getBytes("GBK");//按GBK目标编码。

//得到a[]后在每8个字节为一块进行编码。比如记录偏移位置a[0],a[8],a[16]

//JavaSE默认有Cipher中有DES实现,不用自己去分了,直接送入a[]

java 字节类型的小问题

Java 中的整形数由int,Byte等,Byte就是字节型,占用一个字节空间,而int占用4个字节空间。但他们都是整数。

所以说字节型的15和int型的15都是所说的数字15,只是在计算机中的存放不同,后者占用了4个字节。

Byte向int的转换就是高位扩展即:

00001111在高位添加0(因为是正数,负数添加1)一直到32位,就是:0000……00001111(总共32位),仍然是15

java中字节数一样,表示范围为何不一样?具体这是怎么算出来的?请高手指教!

浮点数标准参考 IEEE 754 。这些数据类型本质上是一种内存布局方式。

浮点数(float 和 double)虽然表示的范围很大,但不是精确的,计算的时候是有误差的,如果想精确地表示一个数,请使用整数。

一个例子是银行如何保存每个人的钱的信息。银行肯定不会使用 double 或 float 等浮点数,而必然是使用整数,精确到分。

我们来举一个例子吧:

public class Test {

    public static void main(String[] args) {

        float f = 3.1415926535384897626f;

        System.out.println(f);

    }

}

输出为:3.1415927

那是不是输出的时候位数不够呢?把代码改成:

public class Test {

    public static void main(String[] args) {

        float f = 3.1415926535384897626f;

        System.out.println(String.format("%.18f", f));

    }

}

让电脑输出 18 位小数,结果为:3.141592741012573200

后面已经开始用 0 补齐了,而且后面的值完全是不精确的。

可见,浮点数是不能提供无限的精度的。实际上这也是符合常理的,float 浮点数只使用 4 字节来存储信息,它只能表示 2^32 个不同的数。想要无限的精度,就需要无限的存储空间。

2. 浮点数的比较

“凑24点”这个游戏中有一个经典例子是 8 ÷ (3 - 8 ÷ 3) = 24 ,假如你要写一个程序玩“24点”:

public class Test {

    public static void main(String[] args) {

        float a = 8.0f / (3.0f - 8.0f / 3.0f);

        float b = 24.0f;

        System.out.println("a = " + a);

        System.out.println("b = " + b);

        if (a == b) {

            System.out.println("a == b");

        } else {

            System.out.println("a != b");

        }

    }

}

程序会认为 a 和 b 相等吗?

答案是 a != b

为什么呢?这就是浮点计算中的误差。如果想比较两个浮点数是否相等,不能使用 == ,正确的做法是这样:

public class Test {

    public static void main(String[] args) {

        float a = 8.0f / (3.0f - 8.0f / 3.0f);

        float b = 24.0f;

        System.out.println("a = " + a);

        System.out.println("b = " + b);

        if (Math.abs(a - b)  0.00001) {

            System.out.println("a == b");

        } else {

            System.out.println("a != b");

        }

    }

}

3. 如果我就想要无限的精度?

我就要可以表示无限大的整数、可以无限精确的小数,怎么办?

网上搜索“高精度加法”、“高精度乘法”,你会了解如何实现它们。

实际使用的时候,使用 java.math.BigInteger 或 java.math.BigDecimal 就可以了。

4. 这些范围是怎么算出来的?

回到你的问题,根据 IEEE 754 中指数和尾数有多少位,可以算出来。

java 中使用DES加密算法 生产的密钥为啥是8个字节

使用DES加密算法生产密钥,java6对DES算法仅支持56位密钥长度,但生成的密钥是64位的.在这64位中,实际的密钥只有56位,另有8位是奇偶校验位,分布于64位密钥中,每8位中有1 位奇偶检验位.

Java byte 二进制

二进制是由机器进行识别的,你这样写cpu只能认为它是十进制数,而且一个byte只有一个字节,1111已经超过了255。如果代码是这样:

byte b = (byte) 255;

System.out.println(b);

系统输出:-1,之所以是-1,因为255的二进制是11111111,计算机中是用补码表示数字的,首位是1的话它认为是负数,而负数的绝对值等于其二进制码的反码加1,正是-1。如果:

byte b = (byte) 256;

System.out.println(b);

它又输出:0。因为256的二进制是100000000,截取后8位是0。

而十进制的1111的二进制是10001010111,截取后8位是1010111,转化为10进制就是87,因此如果代码是:

byte b = (byte) 1111;

System.out.println(b);

输出的结果是:

87。

字节java算法的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 字节和字符、字节java算法的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-24,除非注明,否则均为首码项目网原创文章,转载请注明出处。