java复习(1)

Wesley13
• 阅读 742

这几天开学,很多知识点还很生疏,这两天先把java基础复习一下,有段时间没有写博客了,今天就先谈谈进制转换吧。


  1.二进制数的原码,补码和反码

    1):对于正数的原码,补码和反码均是相同的,这里不讨论了。

    2)接下来我们讨论负数的二进制的原码、反码和补码

    负数二进制的原码:先计算负数绝对值的二进制值,然后对二进制每一位数据进行取反,最后再加1。负数的二进制变现形式是对应整数二进制取反然后加一

      eg:-32

      第一步:计算绝对值的二进制数:32(10)=0010 0000(2)

      第二步:进行取反:1101 1111

         第三步:加一:1110 0000

      故而-32的原码为:1110 0000

    反码:负数的反码等于:原码最高位不变,其余位进行取反。

      eg:-32

      原码:1110 0000

      反码:1001 1111

    补码:负数的补码等于:原码最高位不变,其余位取反,最后加一

      eg:-32

      原码:1110 0000

      反码:1001 1111

      补码:1010 0000

    2.二进制数和八进制、十进制以及十六进制数之间的转换

    eg:对于-10而言

    原码:三步,绝对值、取反、最后加1。故原码:1111 0110

    反码:原码最高位不变,其余位进行取反:1000 1001

    补码:最高位不变,其余位取反,最后进行加一:1111 01111

    其余二进制与八进制、十进制以及十六进制之间的转换类似于二进制与十进制之间的转换。

    3.java的常量与变量

    java是强类型的语言,对于每一种数据都定义了明确的具体数据类型。其中:

    基本数据类型包括:1数值型;2字符型;3布尔型

    数值型包括:整数类型(byte,short,int,long),浮点型(float,daouble)

    字符型:char

    布尔型:boolean

    其中整数默认是int型,小数默认的是double类型

    引用数据类型:类(class),数组([]),接口(interface)

   4.Unicode,GBK和UTF-8之间的区别

   5.表达式数据类型自动提升

所有的byte型、short型和char的值将被提升到int型。

     如果一个操作数是long型,计算结果就是long型;

    如果一个操作数是float型,计算结果就是float型;

    如果一个操作数是double型,计算结果就是double型。

    自动类型提升:

byte b = 3 ;
int x = 4 ;
x= x+b;    //这个地方注意b会提升为Int类型进行计算

  强制类型转换:

byte b =3 ;
b=b+4;//这会报错,强制将int类型的数据进行降格为byte类型的数据
b=(byte)(b+4);    //这个地方不会进行报错,强制类型转换,先将整数值进行转换,转换为byte类型的数值,然后再进行赋值操纵

   6.运算符

    (1)&和|既是逻辑运算符,也是位运算符。而&&和||只是逻辑运算符。

    当&与&&同为逻辑运算符的时候,他们都用于连接两个Boolean类型的表达式,当&和&&的两端表达式同时为真的时候,表达式结果为真,只要有一端为假,那么表达式结果就为假。从用法上,&和&&并没有什么区别,比如我们可以写两个表达式:  3>5&3>2   3>5&&3>2 

这两个运算符都可以这么进行运用,但是不同的是,在判断这两个表达式是真或者假的时候,两者的判断次数是不相同的。

当使用&运算符的时候:计算机在判断表达式的时候,先判断3>5的值为假,然后再判断3>2的结果为真,于是最后的结果是  假&真  为假

但是当我们使用&&运算符的时候:计算机先判断3>5值为假,此时表达式的结果一定为假,所以计算机就不会再进行向下的判断了,判断表达式的结果为假。

  注意:&无论左边的结果是什么,右边还是要进行运算的

     &&当左边结果为假的时候,右边就不再进行运算了。

      但是两者的结果是相同的。

  (2)当|和||的两端表达式为假的时候,表达式的结果为假,只要一端是为真的,那么表达式的结果就为真了。同理,我们知道|和||之间的区别了:

  |无论左边的结果是什么,右边还是要进行计算的。

  ||当左边为真的时候,右边就不会再进行计算了。

  但是二者的结果是相同的。

所以|| 和$$的比较效率还是要高一些的。

记住:单&的时候,左边无论是真假,右边都要进行计算;&&的时候,如果左边为真,那么右边需要进行计算,如果左边为假,那么右边不会参与运算,"|"与"||"的区别是同理的,双或的时候左边为真,那么右边就不会参与运算;同时要记住左右两边为"true"的时候,最后的结果返回的是false

  (3)接下来我们看&和|做位运算,做二进制之间的或运算或者与运算

    比如:6&3=110&011=010

         6|3=110 &  011=111=4+2+1=7

  7.位运算

    进行以为运算:

    左移运算符:能将运算符左侧的匀速那对象向左移动运算符指定的位数

    有符号的右移运算符则将运算度左侧的运算对象向右移动运算符右侧的指定位数,有符号右移运算符使用了符号扩展,若值为正,则在高位插0,若值为负,则在高位插1

    无符号右移运算符(>>>):使用了0来进行扩展,即无论值为正还是为负,都在高位进行插入0

    在进行为运算的时候需要注意:

    (1):>>和>>>的区别是:在执行运算的时候,>>>运算符的操作数高位时进行补0处理的,而>>高位时补的与原来高位相同的值

    <<    左移运算    比如3<<2  3=0000 0011  --- >左移两位得到:0000 1100 =12,就是3*2*2=12

    >>    右移运算    比如 3>>1 3=0000 0011 --- >右移两位得到:3>>1=1 -->3/2=1

    >>>            无符号右移   3>>>1=1--->3/2=1

    &    与运算     6&3=2

    |    或运算       6|3=7

    ^    异或运算      6^3=5

    ~    反码      ~6=-7

位运算的一些细节:<<    是空位补0,被移除的高位丢弃,空缺补0

         >>    若被移位的二进制最高位是0,向右移动之后,空缺的位置都用0来补

         >>>    被移位的二妗子无论最高位是0还是1,空缺的位都用0来进行补充

         &      二进制位&运算,只有1&1时候的结果是1,否则就是0

         |      二进制或运算,只有0|0的时候结果是0,否则结果是1; 

              ^      相同二进制位进行^运算,结果是0,1^1=0;0^0=0

         不同二进制进行疑惑运算的结果是1

    最有效率的计算出2*8

    8.三元运算符:

      格式:(条件表达式)?表达式1:表达式2;

      如果条件为true,那么运算之后的结果是表达式1;

      如果条件为false,那么运算后的结果是表达式2

    示例:

      获取两个数中的比较大的数。

       Int x =3,y=4,z;

       Z=(X>Y)?X:Y;  //z变量存储的就是两个数的比较大的数值

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
似梦清欢 似梦清欢
1年前
数据机器级表示
计算机中存储有符号数的时候是按照补码的形式存进去的。原码是数字的二进制表示,补码是原码取反1。正数的原反补相同。原码:最高位表示符号位,其余位表示数值位的编码称为原码。正数的符号位为0,负数的符号位为1。负数的反码:原码的符号位保持不变,数值位逐位取反,
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
java 二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题
一.二进制,位运算,移位运算1.二进制对于原码,反码,补码而言,需要注意以下几点:(1).Java中没有无符号数,换言之,Java中的数都是有符号的;(2).二进制的最高位是符号位,0表示正数,1表示负数;(3).正数的原码,反码,补码都一样;(4).负数的反码它的原码符号位不变,其他位取反;(5).
Wesley13 Wesley13
3年前
Go之关系运算符、逻辑运算符、进制数、杂项
一:关系运算符,和php的一致,略。二:逻辑运算符,和已知的php一致,略。三:进制数,已在php中学习,略。四:Golang中不存在三元运算符。五:源码,反码,补码。对于有符号的而言:①:二进制的最高位是符号,0表示正数,1表示负数。②:正数的源码,反码,补码都一样。  1\补码:00000001,反码:0000
Stella981 Stella981
3年前
20180109Java位运算
一,Java位运算1.表示方法:  在Java语言中,二进制数使用补码表示,最高位为符号位,正数的符号位为0,负数为1。补码的表示需要满足如下要求。 (1)正数的最高位为0,其余各位代表数值本身(二进制数)。 (2)对于负数,通过对该数绝对值的补码按位取反,再对整个数加1。 2.位运算符位运算表达式由
Wesley13 Wesley13
3年前
2019.9.14关于
前提都是8位的整数表示\128没有原码和反码(只有补码)那么,为什么规定字长8位时128没有原码和反码呢?下面解释。首先看0,\0\原码1000000,其中1是符号位,求反操作,算出\0\反码11111111,再看128,假如它有原码且\128\原码10000000,假如让128也有反码,求反操作,则\
可莉 可莉
3年前
20180109Java位运算
一,Java位运算1.表示方法:  在Java语言中,二进制数使用补码表示,最高位为符号位,正数的符号位为0,负数为1。补码的表示需要满足如下要求。 (1)正数的最高位为0,其余各位代表数值本身(二进制数)。 (2)对于负数,通过对该数绝对值的补码按位取反,再对整个数加1。 2.位运算符位运算表达式由
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。