我的java作业。。。 大家忽略掉。。。给童鞋们看的。。张桂珠 呵呵
实验一
题目一: 将一个128bits位的数 扩大两倍
提示 :用神奇的位运算
内容: 说位运算 咱就用位运算 妥妥的。
思路 : 扩大为原来的二倍。 看到了二倍,二倍 你能想到什么?想到了什么! 二倍和三倍不是一个概念,为什么? 因为计算机就是一个0和1的东西,他就是通过二进制来存储东西的! 所以扩大两倍 就是向左移动移位,也就是把每个数位的权扩大。
再就是 128位了 long 才64位。。。不知道long long 可不可可以。。分成两个数吧。。
记得进位!!that’s all!
源代码:
package a;
import java.util.*;
public class my {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 读取输入
System.out.println("请输入32位16进制数字(格式为:0101010101010101 1010101010101010(中间用空格分开)):");
String s;
s=scanner.nextLine();
String[] str=s.split(" ");
long a,b,p;
a=Long.parseLong(str[0], 16);
b=Long.parseLong(str[1], 16);
System.out.println("您输入的数据为:");
System.out.println(String.format("%016x %016x ",a,b));
p= b&0x8000000000000000l;
//System.out.println(p);
//移位
a=a<<1;
if(p!=0) a=a|1;//处理进位
b=b<<1;
System.out.println("扩大两倍后的数据为:");
System.out.println(String.format("%016x %016x ",a,b));
}//by airuozhaoyang
}
运行结果:
小结: java麻麻烦烦啊。。输入输出好麻烦啊 查了好多百度 又是输入流 又是输出了 封装好的东西 还要去查查API。。。蛋疼。。考虑一下计算机的感受好么。。。
题目二:通过位运算实现 y=a*100;
内容:位运算实现乘法 就是把100拆开呗。
思路:把100拆成二进制 来算呗。 100= 64+32+4
哇塞 真的成功了啦。
源代码:
package a;
import java.util.*;
public class my2 {//用位运算实现a*100
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 读取输入
System.out.println("请输入乘数a:");
String s;
s=scanner.nextLine();
// 100=64+32+4=6 5 2
long a=Long.parseLong(s, 10);
long c,d,f;
c=a<<6;
d=a<<5;
f=a<<2;
System.out.println(String.format("经过计算得: a*100= %d",c+d+f));
}
//by airuozhaoyang
}
运行结果:
小结: 这道题出的十分巧妙 其实就是从计算机的角度考虑问题 不失拙计。 巧夺天工。
心得体会: 这两道题 深深的侧重了 从计算机存储方式来考虑 计算的方法。 我想 这正是 张老师的良苦用心所在。 为我打开了一个心得思考领域,学会用另一种眼光看待 计算。
两题 彰显了老师经验丰富,水平超群。学生收货颇丰。