2018年7月15日
暑假第一周,我从网上找了一些讲Java的视频,学到了一些Java的基础,同时也弥补了一些之前学c/c++的知识漏洞。例如,了解到了原码反码补码和按位取反运算符(~)的运算原理。
在计算机中一个整型数4字节,1字节8位;正数的原码反码补码是一样的;二进制数以补码的形式存储,负数以其正值的补码形式存在。
负数原码转换为反码,符号位不变,其他按位取反,反码转换为原码也是一样;原码转换为补码:符号位不变,其他按位取反,末位再加1,即反码末位加1。
-7 10000000 00000000 00000000 00000111 原码
11111111 11111111 11111111 11111000 反码
11111111 11111111 11111111 11111001 补码
~7 00000000 00000000 00000000 00000111 原码
11111111 11111111 11111111 11111000 按位取反后变成未知数X的补码
- 00000000 00000000 00000000 00000001 补码变反码的操作
11111111 11111111 11111111 11110111 未知数X的反码
10000000 00000000 00000000 00001000 未知数X的原码
所以~7 = -8
其次,还总结了一些c++与java的不同点并发表在博客园。Java与c++都是面向对象语言,我们学过c++,再根据这些不同点来学java就能更快掌握java的基础。
本周总计学习时间可达到20小时,周一至周五每天有4个小时用来学Java,周六周日休息、总结,其中用在代码上的时间基本上每天有1个小时。
本周遇到了一些细节性的问题,比如要用Scanner类输入数据就必须有一句import java.util.Scanner;但是我把util写成了until,所以编译一直报错,仔细检查一遍就解决了问题。还有一些问题是对Java一些语句用法不熟悉造成的,比如Scanner中没有nextChar方法,还有nextInt、nextLine方法连用出现无法录入数据的现象。原因是nextInt方法只获取了整数就结束了,整数后边的\r\n不吸收,而nextLine方法遇到\r\n就会结束,解决方法是将nextLine改为next。这些问题不算大问题,所以加起来总共花在上面的时间大概只有1小时。
这一周学习生活很充实,下一周我会继续保持目前速度。