1,(在有符号的情况下)若一个二进制数都是1,则对应的十进制数是-1

2,在定义数值类型时,若无特别说明,整数默认:int  小数默认:double
在内存中
      占字节数            取值范围
(1)byte:1个字节(8个二进制位) -2(7) ---     2(7)-1
(2)short:2个字节(16个二进制位)-2(15)---   2(15)-1
(3)int :4个字节(32个二进制位)-2(31)---     2(31)-1
(4)long: 8个字节(64个二进制位)-2(63) ---  2(63)-1
class VarDemo
{
public static void main(String[] args)
{
//数据类型 变量名 = 初始化值
byte b = 6;
short c = 8;
int x = 123;
long l = 123456789006l; //注意最后是英文字母“l”,不是数字1
}
}

虽然在程序中定义了byte类型的变量b,并赋给了初值为整数6,但是此时这个整数6是默认为int(占据4个字节)类型的,在内存中的表示形式为:00000000 00000000 00000000 00000110,但是byte在内存中只占据了一个字节00000000,那他是如何装下这个整数6呢?

但是编译器在检查的时候,发现6这个整数在byte范围之内,所以会自动把前面的三个字节段去掉
【00000000 00000000 00000000 00000110】---》【00000110】

其他的依照这个类推!

class VarDemo
{
public static void main(String[] args)
{
byte b = 6; short s = 4; int i = 7; long l = 1234567890l; //过大的数(范围超过了int型) float f = 2.3f; //如果不加f的话,编译的时候会报错,说损失精度,因为小数默认是double类型的 double d = 3.4; char c = '1'; //char c = 1 boolean bo = true; //bo = false
}
}
//自动类型转换
class VarDemo2
{
public static void main(String[] args)
{
/*
byte b = 4;
int x = 3;
x = x + b; //b就自动类型提升为和x一样的整形。
System.out.println("x="+x);
*/ byte b = 3;
b = b + 1;
/*
      【在编译的时候,b=b+1是不会做加法运算的,所以下文中说到的相加是不准确的。】
这一句在编译的时候会报错,因为在做相加之前
byte类型的变量b被自动提升为了和1一样的整形类型
,所以相加完后的结果为整形,但是要赋给的变量b此时
是byte类型的,所以可能丢失精度,此时编译器会报错:
原理如下图(1) 但是此时又有这样一个疑问:
在定义byte b = 3;的时候,3也是整形的,
那为什么整形的3可以赋值给byte类型的变量b呢(这个解释就是上面所说的内容)
疑问是虽然做完了加法运算后的结果为整数(4),但是整形的4也在byte范围之内啊,
此时为什么就不能赋给byte类型的变量b了呢? 原因是:
因为在做加法之前,byte类型的变量b的值是不确定的,比如如下代码
byte b = 3;
b = 127;
b = b+1;
这个时候做完加法后的结果是整形的数值128,而此时128已然超出了byte类型的范围,所以如果再
把128赋给byte类型的变量b,就会发生数据损失。 而byte b = 3之所以可以完成把整形(int)的数3赋给byte类型的变量b是因为编译器在检查的时候
判断了这个3是在byte范围之内的,并且这个3是一个常量,值不会改变,(就是数值3)所以可以按照上面的
方法把这个整形的3赋给byte类型的变量b。 总结一句话就是:
若是不变的量(常量)在判断后,符合这个类型的取值范围,则可以成功赋值。
若是变量,则不能再赋值。比如 上面的b = b + 1;(第二个b是变量,不确定其值,万一b等于127呢?思考...)
*/
System.out.println("b="+b);
}
}

        /*可以通过强制类型转换,实现上述赋值*/
//byte b = 3;
//b = (byte)(b+1);
System.out.println("b="+b);      //但是种转换可能发生数据丢失:如下图:

class OperateDemo
{
public static void main(String[] args)
{
/*【算术运算符】 + - * / %(取余数)
*/
int x1 = 3810;
System.out.println(x/1000); System.out.println(2%5); //结果为2
System.out.println(-2%5); //结果为-2
System.out.println(2%-5); //结果为2
System.out.println(-2%-5); //结果为-2
//总结:结果为正还是为负,取决于左边的操作数。
// 若左边操作数为正,则结果一定为正,
// 若左边的操作数为负,则结果一定为负。
//应用:
// 如果想让某一个结果控制在这个数的范围内,
// 则可以用模运算进行操作。比如想让某一个数
// 的结果控制在10以内,就模10,则运算后的结果
// 一定在10以内 /*
【++:自增】。对原有的数据进行+1 int a = 3;
a++ ++a--->a = a+1;
//当自增,自减进行独立运算的时候,++a和a++是没有区别的。
a++;
System.out.println("a="+a) //结果是a=4 ++a;
System.out.println("a="+a) //结果是a=4 */ //当这个自增运算和其他运算放在一起时,就有区别了: int a= 3,b;
b = ++a;
System.out.println("a="+a+"b="+b); //结果是a=4,b=4 /*
b = ++a;
运算过程如下:
a先执行a = a+1;再把此时a的值赋给b
*/ b=a++;
System.out.println("a="+a+"b="+b); //运算结果是a=4,b=3; /*
b = a++;
运算过程如下:
先在内存中开辟一块空间,把a的值3临时存储下来,然后做a= a+1运算,
此时a的值为4。再把原有的a的值赋给b,则此时b的值为3。 其运算原理如下:
temp = a; //先将a进行临时存储。
a = a+1; //自增
b = temp; //将临时的值赋给b。
*/ //字符串的连接符:
System.out.println(5+5); //输出结果为整数10
System.out.println("5"+5); //输出结果为字符串55
System.out.println("5+5="+5+5); //输出结果为5+5=55
System.out.println("5+5="+(5+5)); //输出结果为5+5=10 //【赋值运算符】:= , +=, -= , *= , /= , %=
int x,y,z;
x=y=z; int a = 3; //把右边赋给左边
a+=4; //将左右两边的和赋给左边a = a+4; //练习题:下面两个式子有区别吗?
short s = 4;
//s = s+5; //编译不能通过 //s+=5; //编译可以通过,因为+=是赋值运算符,会做自动转换。 //【比较运算符】
System.out.println(3==4); //输出结果为:false
//运算完的结果要么true,要么false //【逻辑运算符】用来连接boolean型表达式的。
/*
&:与
|:或
^:异或
!:非 && :短路与 || :短路或
*/
int x = 7;
//x>2 & x<5
//x<2 | x>5 /*
&:两边都为true,结果为true.否则为false.
|:两边都为false,结果为false,否则为true.
^:两边相同为false,两边相异为true.
*/ //&& :短路与 || :短路或
y>3 & y<6
y>3 && y<6 /*
& 和 && 的区别:
&:无论左边结果是什么,两边都参与运算。
&&:当左边为false,右边不参与运算。 | 和 ||的区别:
|: 两边都参与运算。
||:当左边为true时,右边不参与运算。
*/ }
}

《JAVA----day01和day02》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. UVa 10163 仓库守卫

    https://vjudge.net/problem/UVA-10163 题意: 有n个仓库,m个管理员,每个管理员有一个能力值P(接下来的一行有m个数,表示每个管理员的能力值) 每个仓库只能由一个管 ...

  2. 在SSM框架中,multfile转file

    import org.apache.commons.fileupload.disk.DiskFileItem; import org.springframework.web.multipart.Mul ...

  3. yunw

  4. Linux基础※※※※Linux中的图形相关工具

    kolourPaint类似于Win中个mspaint: Ubuntu安装:sudo apt-get install kolourpaint4 图1 kolourPaint界面 其他类似的画图工具见链接 ...

  5. 简单介绍tomcat中maxThreads,acceptCount,connectionTimeout

    <?xml version='1.0' encoding='utf-8'?> <Server port="8005" shutdown="SHUTDOW ...

  6. Eclipse 打包jar

    1.将项目打成jar: 1.1 要将项目打包成jar文件,方法很多,可以用Eclipse自带的打包工具Ant打包,也可以用Eclipse的Export生成jar.经过尝试后,我不推荐用Ant打包,因为 ...

  7. 显示Unicode 字节的对应字符的小技巧

    在一段smali代码里看到这样的代码 const-string v0, "\u7528\u6237\u9a8c\u8bc1\u8fc7\u671f\uff0c\u8bf7\u91cd\u65 ...

  8. English trip WeekEnd-Lesson 2018.11.10

    本周末上了三节课,做个小结吧\(^o^)/~: [102] 新概念一早读 - 27 - 28        Teacher: March Mrs. Smith's living room is lar ...

  9. 原生js实现倒计时

    html代码: <div class="box">距离下班还有:<span>01:01:30</span></div> css代码: ...

  10. 微信小程序之更新上一页数据(十二)

    小程序开发过程中经常有这种需求,需要把当前页面数据传递给上一个页面,但是wx.navigateBack()无法传递数据. 一般的办法是把当前页面数据放入本地缓存,上一个页面再从缓存中取出. 除此之外还 ...