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. [JVM] - 一份<自己动手写Java虚拟机>的测试版

    go语言下载 配置GOROOT(一般是自动的),配置GOPATH(如果想自己改的话) 参照<自己动手写Java虚拟机> > 第一章 指令集和解释器 生成了ch01.exe文件 这里还 ...

  2. IDEA启动时自动报Plugin Error错误

    Plugin Error Problems found loading plugins: Plugin "JBoss Integration" was not loaded: re ...

  3. #使用ListView更新数据出现闪烁解决办法

    //使用双缓冲:添加新类继承ListView 对其重写 public class DoubleBufferListView : ListView { public DoubleBufferListVi ...

  4. [转]python新手必碰到的问题---encode与decode,中文乱码--转载

    edu.codepub.com/2009/1029/17037.php 这个问题在python3.0里已经解决了. 这有篇很好的文章,可以明白这个问题: 为什么会报错“UnicodeEncodeErr ...

  5. 《剑指offer》第十八题(在O(1)时间删除链表结点)

    // 面试题18(一):在O(1)时间删除链表结点 // 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该 // 结点. #include <iostream> ...

  6. Knight Probability in Chessboard

    2018-07-14 09:57:59 问题描述: 问题求解: 本题本质上是个挺模板的题目.本质是一个求最后每个落点的数目,用总的数目来除有所可能生成的可能性.这种计数的问题可以使用动态规划来进行解决 ...

  7. YII第三步,日志开启

    YII第三步,日志开启 index.php入口文件配置: defined('YII_DEBUG') or define('YII_DEBUG',true); cofig/main.php 'prelo ...

  8. 雷林鹏分享:C# 特性(Attribute)

    C# 特性(Attribute) 特性(Attribute)是用于在运行时传递程序中各种元素(比如类.方法.结构.枚举.组件等)的行为信息的声明性标签.您可以通过使用特性向程序添加声明性信息.一个声明 ...

  9. LeetCode--069--x的平方根

    问题描述: 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: ...

  10. 3-4 8精彩算法集合。struct(C,ruby) Ruyb类对象和结构体, 3-5

    在本章我遇到了c语言的struct数据,即自定义的数据结构.比如: struct edge { int u; int v; int w; }; 题目给了一组数据,用edge储存.需要按照w大小排序.我 ...