第二次课总结及作业思考

一、关于用二进制描述78、-123的原码、反码、补码的作业思考

      78的原码用8位二进制表示为01001110,因为正数的反码、补码和原码都相同,所以78的二进制反码、补码都是01001110;

      -123的原码用8位二进制表示为11111011,原码转为反码的原则是在原码的基础上,符号位不变,其余各位取反,所以-123的反码是10000100,原码转为补码的原则是在反码的基础上加1,所以-123的补码为10000101。


二、关于byte取值范围中的-128是如何得到以及如何表示的思考

      我们知道,byte的取值范围是-128~127,问题是这个-128是怎么得到的。8位二进制能组成2^8,即256个数。0~127(用二进制表示则是00000000~01111111)这个范围共128个数,那么就意味着负数部分也有128个数。

现在,我们先来用(-128)=(-1)+(-127)这种形式来分析一下-128的得到过程。

  (-1)+(-127)

=[10000001](原)+[11111111](原)

=[11111110](反)+[10000000](反)

=[11111111](补)+[10000001](补)

=[10000000](补)(第9位的1被剔除了)

      接着,我们会把[10000000](补)转回原码,但是结果也是10000000。也许有人以为[10000000](原)这是十进制的-0,[10000000](补)是十进制-0的补码形式,但是在补码中,真值0(注:真值是指用+、-号加绝对值来表示数值大小的数值)的表示形式是唯一的:[+0](补)=[-0](补)=00000000。所以排除[10000000](补)是0的可能性。

     在上面的分析中,0~127这个范围的128个数用二进制表示是00000000~01111111,那么负数部分的128个数是不是在10000000~11111111这个范围内呢?我们来分析一下。我们已经知道10000000代表的是-128,10000001~111111111代表的是-1~-127,

所以问题也可以迎刃而解了。


三、关于“byte a =(byte)(125+5);System.out.println(a);输出结果为-126”的过程思考

      在计算机系统中,数值一律用补码来表示和存储。130用8位二进制表示为10000010,其补码为11111110,对应着十进制的-126。或者,我们通过byte的取值范围(-128~127)来理解,125+2时已到达127,多出的3就转入这个取值范围的循环,从-128往数轴的正方向数,那么就是-126了。


四、关于"byte a =(byte)(125+5);System.out.println(a);结果为-126;"
和"System.out.println(Integer.toBinaryString(a));结果为11111111111111111111111110000010"的思考

      java中的byte、int有正负之分,但在计算机内存中没有正负之分,只有0/1,整数(负数、正数)是用补码来表示的。正数的补码等于它的原码,负数的补码等于它的原码除了符号位之外,其余各位取反加1。

      1、byte a =(byte)(125+5)中,因为java中,整数的默认计算结果是int类型(4个字节),130的补码用4字节的整型来表示:000000000000000010000010,但是byte是1字节(8位),所以就截取低8位,即10000010。但是这个补码是负数,System.out.println(a)输出的是二进制原码对应的十进制。将10000010转回原码就是11111110,即十进制的-126。这里可参考余老师的博文

      2、"System.out.println(Integer.toBinaryString(a));"中,a的值为-126,8位二进制原码为11111110,反码为10000001,补码为10000010。对于32位二进制,而且a又是负数,所以就在前面补16个1。

   

五、关于第二节课的总结、思考

1、包、类、变量、常量、方法的命名规范:

     包名全部小写;类名首字母大写;变量名、方法名采用驼峰式命名,即除了第一个单词小写,其余单词的首字母大写;常量名全部大写。

2、类的方法之间的正确高效调用以及如何避免无效的相互调用,如:

package hellojava;
import control.Weather;
public class test {

	public static void main(String[] args) {
		Weather weather = new Weather();
		System.out.println(weather.getCurrentWeather());
		
//		错误用法,又调用了一次test
		weather.printName();	
	}
	public void printName() {
		System.out.println("某某");
	}
}

package control;
import hellojava.test;
public class Weather {
	public String getCurrentWeather(){
	return "今天下雨!";
	}	
	public void printName() {
		test t = new test();
		t.printName();
	}
}

第一个代码weather.printName()又一次无效地调用test类中的printName方法,应该避免这个用法。

3、修饰符public、protected、private、default。在这里补充一下它们对于方法和数据的可见性

类中成员的修饰符在同一类中课访问在同一包内可访问在子类内可访问在不同包可访问
publicyyyy
protectedyyy
(default)yy

privatey



4、用final、abstract修饰变量、方法、接口的简单应用;

5、如何编写良好的注释,采取多行注释应用于某个方法,其中应注明方法的功能,传入的参数(@param:paramName{type})、返回值类型(@return:{returnType});

6、java是强类型语言,java的反射(这里可以参考一下http://blog.csdn.net/nieweilin/article/details/5908165);
     7、数据类型:

   (1)jvm只能操作堆栈,不能操作寄存器

   (2)堆栈是一种数据结构:
          栈空间存储效率较高,存储基础数据类型,以“先进后出”的顺序管理数据;存储空间较少,不能存储较大的数据;
          堆空间:存储效率较低,存引用数据类型,存储位置随机分配,存储大数据;

 8、变量:

   (1)字面量:如double pi=3.14的3.14;

   (2)良好的命名规范:应语义化,首字母不大写;

   (3)变量的作用域:花括号结束,jvm回收变量;

   (4)java整数默认计算结果是int。eg.如果需要用long类型变量: long a = 5000000000L;

   (5)原码、反码、补码的相互转换的方法

      以8位二进制为例。

      原码的符号位(首位):0位正,1为负。

      反码:在原码的基础上,符号位不变,其余各位取反。

      补码:在反码的基础上,加1。

       反码、补码的符号位参与运算,原码的符号位不参与运算

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值