Java菜鸟逆袭之基础语法下

前提知识点2:原码,反码,补码
 有符号数据表示法
• 在计算机内,有符号数有3种表示法:原码、反码和补码。所有数据的运算都是采用补码进行的。
• 原码
• 就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
• 反码
• 正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
• 补码
• 正数的补码与其原码相同;负数的补码是在其反码的末位加1。

左移运算:整数左移应该是先转为二进制,左边移动相应位数,右边补0,符号位不变。

-9>>2
-9的原码:10000000 00000000 00000000 00001001
-9的反码:11111111 11111111 11111111 11110110
-9的补码:11111111 11111111 11111111 11110111
右移两位:1111111111 11111111 11111111 111101
求回原码: 1.。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。11—— -3

左移运算:数值a向左移动n位,得到的值是a*2的n次方。
右移运算:数值a向右移动n位,得到的值是a*2的-n次方。—-直接取到小于商的最大整数

移位规则规定:
/*
右移:
如果是有符号右移,首先看正数还是负数,对正数右移,高位补0,符号位也就是最高位不变;对负数右移,
* 需要先把负数的补码表示出来,然后进行右移,高位补1,最高位不变,好了之后再进行求原码。
* 如果是无符号右移,正数跟有符号右移一样,负数需要先把补码表示出来,然后进行右移,高位补0,然后直接
* 计算十进制即可。

左移:对负数和整数进行左移都要保持最高位不变,右边都补0.因为右边不牵扯正负号问题。另外负数左移也需要先转补码。
*
*/
9<<2:
1. 先求出9的二进制:
2. 对二进制求补码。
3. 移位运算,法则参考上面注释的描述。

难点:对负数求右移操作
//求一个负数的移位运算结果
int a=-9;
// 将a转为二进制,由于a为负数,所以最高位应该为1,1代表负号
// 原码 10000000 00000000 000000000 00001001
// 负数在计算机里面是以补码的方式保存的,原码需要变成补码,原码求补码,符号位不变
// 其他位取反然后加1,按照这个方式,补码为:11111111 11111111 11111111 11110111
// 右移2位 最后两位没有了,前面补两位1也就是负号。 11111111 1111111 11111111 11111101
// 补码求原码 ,计算方式跟原码求补码一样:10………………..。11 结果就是-3
System.out.println(a>>2);
这里写图片描述

逻辑运算:
&&(逻辑与),||(逻辑或),!逻辑非(这三个运算符算出来的结果也只有两个值:false,true)
逻辑与:只要有一个为false,最后表达式结果false 乘法运算,false代表0,true代表1
逻辑或:有一个为true,最后结果true 加法运算:false代表0,true代表1

逻辑运算短路现象:当整个表达式的值已经确定时候,后面的表达式部分不参与运算。

int a=9;
int b=8;
System.out.println(9>0||((a=a+1)==13));//右边的式子不参与运算原因是左边为true,在
//逻辑或里面有一端为true,整个表达式就是true
System.out.println(a);//9

按位运算符
和逻辑运算相似,&代表与运算(乘法运算),|代表或运算(加法运算),^代表异或(相同为0,不同为1) ,~代表取相反。

按位与:&对0,1进行运算 有一个为0,最后按位与的结果就是0,相当于乘法
按位或:|,有一个为1,最后结果为1,相当于加法
按位非:~ 非0就是1,非1就是0
按位异或:^ 相同为0,不同为1

要进行位运算,首先要会转二进制:
整数转二进制,除以2取余数,最后一直算到被除数小于2为止。最后将余数倒着写出来即可。
int a=9;
int b=8;
System.out.println(a&b);//8
System.out.println(a|b);//9
System.out.println(~b);//7
System.out.println(a^b);//1

自增自减运算符:
i++ (自加运算符) 整个表达式的值不变,但是i的值加了个1,先求值,再运算

i– 整个表达式的值不变,但是i的值减了个1,先赋值,再运算
++i 整个表达式的值加1,i的值加了个1—–先运算,再赋值
–i 整个表达式的值减1,i的值减了个1 —–先运算,再赋值

8.String字符串初探
属性+方法
双引号里面写文字,连接多个字符串及变量用+
构建字符串变量有两种方式:
1) String str=new String(“sssssssssssssss”);
2) String str=”ssssssssssssssssssss”
字符串如果要进行拼接:str=str+”anoter string”;
String类里面有哪些常用的功能?
1. 字符串长度str.length()
2. Str.charAt(i) I 从0开始的。

9.键盘输入

/*
* 让用户输入姓名,年龄,家庭住址,然后打印出个人具体信息
*/
Scanner scan=new Scanner(System.in);
System.out.println(“input your name:”);
String name=scan.next();
System.out.println(“input your age:”);
int age=scan.nextInt();
System.out.println(“input your address:”);
String address=scan.next();
//拼接字符串
String info=”“;
info=info+”学生姓名:”+name+”,年龄:”+age+”,地址:”+address;
System.out.println(info);

视频分享:
1.http://v.youku.com/v_show/id_XMTcxMzYxODc0MA==.html
2.http://v.youku.com/v_show/id_XMTcxMzY2NDEyOA==.html
3.http://v.youku.com/v_show/id_XODQ3ODAyNzA0.html
4.http://v.youku.com/v_show/id_XODQ3ODAyNTk2.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值