「字节java算法」java 字节和字符
本篇文章给大家谈谈字节java算法,以及java 字节和字符对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、用java设计一个程序算法,实现下列功能:输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证
- 2、java :DES算法中的明文有64位,请问这64是代表64个字节(意思是有64个byte类型),还是八个字节?
- 3、java 字节类型的小问题
- 4、java中字节数一样,表示范围为何不一样?具体这是怎么算出来的?请高手指教!
- 5、java 中使用DES加密算法 生产的密钥为啥是8个字节
- 6、Java byte 二进制
用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算法的信息别忘了在本站进行查找喔。
发布于:2022-12-24,除非注明,否则均为
原创文章,转载请注明出处。