技术宅工作吧 关注:99贴子:1,583

java教程【基础篇】

只看楼主收藏回复

本来打算明天更,但闲来无事,就这样了


IP属地:北京1楼2015-07-24 13:55回复
    I、运算符
    作为初级编程的难点,我想说的是:咱不一定能看懂诶
    在本章,我们将会学习到
    ----赋值运算符
    ----算术运算符
    ----自增与自减运算符
    ----比较运算符
    ----逻辑运算符
    ----位运算符
    ----三元运算符
    ----运算符优先级
    ----实例


    IP属地:北京3楼2015-07-24 14:14
    回复
      运算是一个计算的过程,其中最为常见的是二元运算符,即对两个操作数进行处理。最常见的二元运算符是赋值运算符"="
      其格式是这样的:
      变量类型 变量名 = 值
      真心觉得这个大家应该都能理解,但注意一点:
      我们可以同时对多个变量赋值,如:
      int a=4,b,c,d,e
      b=c=d=7
      e=2


      IP属地:北京4楼2015-07-24 14:29
      收起回复
        算术运算符也很常见,+-*/相信大家都会,另外还有个求余数%
        如:0.2%3=0.2,3L/0.4f=7.5
        零不能作除数哦


        IP属地:北京5楼2015-07-24 14:47
        回复
          如下几组程序(main方法、大括号略):
          system.out.println(2/3)
          结果:0
          system.out.println(2/3F)
          结果:0.6666667
          system.out.println(0.2/3)
          结果:0.0666667
          system.out.println(0.2F/3)
          结果:0.0666667
          system.out.println(0.2/3F)
          结果:0.06666666666666667
          大家会不会觉得很圪㙩?
          其实也没那么复杂,以下是XXX学霸的解释:
          第一个,2和3都是int型数据,但结果是浮点数,系统强制按int处理,故小数点以后被砍掉,结果为0,你可以试一下3/2,结果应该为1。
          第二个,你把3定义为单精度浮点数,故结果为单精度浮点数,
          第三个,出现了0.2,数据类型默认为浮点数,故输出浮点数!
          第四个,与第二个一样。由此可以得出,两个数运算,系统把结果的数据类型定为更高级的那个类型
          第五个,两个单精度浮点数运算,最后输出双精度浮点数!
          那么现在给大家出道题:假设有两个整数A,B,且满足-128<A<129,-128<B<129,试用占用内存最小的方式,求出A/B的商,结果分两行显示,第一行输出小数值,第二行输出用进一法保留的整数值。


          IP属地:北京6楼2015-07-25 13:19
          收起回复
            于是我们来看个很好玩的运算符:自加与自减运算符。
            首先问一下大神们:这个运算符有什么卵用?求个解释。@mengyapeng1
            那么这个运算符有四种,以变量i为例,其四种分别为:
            ++i,i++,--i,i--
            前两种能够使这个变量增加一,后两种能使这个变量减小一。
            那么问题来了:i++与++i有什么区别?别着急,先来看个程序。


            那么我用分析运算过程的方式,看看你能不能搞清(括号为行数)。
            首先我们定义了一个变量A=2(3),然后让它增加1,之后赋值给了变量B,此时A=3,B=3(4)。之后它赋值给了变量C,此时C为刚才在第四行中加出来的3,然后赋值结束后,它才进行了自加运算,值为3+1=4.所以输出结果如图。
            所以我们得到一条重要的定理:
            自加(减)运算符在前,先运算后赋值;
            自加(减)运算符在后,先赋值再运算。
            这就是著名的自加减定律。


            IP属地:北京7楼2015-07-25 13:42
            收起回复
              使用自加减运算注意:数字不可直接进行自加减运算,自加减不可叠加使用。


              IP属地:北京8楼2015-07-25 13:46
              收起回复
                ========================前方高能预警!非战斗人员请赶快撤离!========================
                ===============================我是那华丽的分割线=================================


                IP属地:北京10楼2015-07-25 14:05
                收起回复
                  逻辑运算符
                  其实这一点并不是很难,关键问题在于那教材写的稍(fei)微(chang)的圪㙩,圪㙩到我看不懂。不过,纵使它写的多复杂,当我看到了程序之后,机智的我便看穿了一切。还是那句话:教材写得真抽象。

                  首先我必须吐槽一下:op这是闹哪样!
                  敬请大家无视掉含义中的逻辑,再屏蔽掉结合方向(一会再说),那么就显得清晰了:
                  &&与&是与
                  ||与|是或
                  !是非
                  你要分不清与、或、非,那么你就放弃学集合吧
                  注意一点:前两者都是二元运算符,后者是一元运算符。
                  所以我们就看到了这张圪㙩的表

                  关于这个,我想说其实与命题的真假性有些像,什么命题、逆命题、否命题、逆否命题,这个其实差不多。
                  假设1与2是两个假命题,那么用与将他们联系其结果依然为真命题,或同理,其否命题必为假命题
                  。。。。。。
                  同理分析,观察上表,我们来得些基本结论(为了押韵姑且将与当成并好了):
                  用并连接时,只要有一个是假,就是假;
                  用或连接时,只要有一个为真,就是真;
                  用否连接时,真变反,反变真。
                  总结为口诀就是:并假假,或真真,否真假假真


                  IP属地:北京11楼2015-07-25 14:28
                  回复
                    那么问题来了:&&与&有何区别?||与|有何区别?别着急,明天我们就来进一步的认识逻辑运算符。
                    预告哦,明天会全程高能:看俺老孙的移位大法!


                    IP属地:北京12楼2015-07-25 14:31
                    回复
                      首先我们接着昨天说一说逻辑运算符。
                      那么来看看昨天挖的那个坑:&&与&有什么区别?其实是有区别的,区别在于:短路。
                      大家知道什么是短路吗?就是将导线接在用电器两端,这个时候由于导线电阻小用电器的电流绕着跑,无法正常工作。在编程中,也有短路的情况。我们将&&成为短路运算符,&称为非短路运算符。其原因是这样的:
                      假设有这么一个逻辑运算式,左边为false,右边为true,此时如果用&连接会逐个进行判断,而用&&会判断第一个之后输出false,此时true就被短路了,所以我们称为短路运算符。同样的,如果用||与|时,||只要有一个为真,则第二个直接被短路,|则不会。所以我们发现:短路运算符可以减少判断次数。
                      关于逻辑非,我们知道!=表示≠,那么能否引申呢?答案是否定的。如果你那天看到一个人说有!<这种符号的话,你就尽情嘲笑TA吧!
                      注意关于!的使用,!的使用是!(),必须加括号
                      例如:boolean C = !((A>B)|(A!=B));
                      好吧以上大家有不懂的欢迎插楼,不过反 正 这 帖 也 没 人 看


                      IP属地:北京13楼2015-07-26 13:12
                      收起回复
                        程序略,这个相信大家都能编出来。我们来做几道题吧!
                        1、说出下列语句的不同点,并直接写出输出结果。如有多种可能,请写出每种结果的取值范围。
                        (1)boolean C = !((A>B)|(A!=B));
                        boolean C = !((A>B)||(A!=B));
                        boolean C = !(A>B)|(A!=B);
                        boolean C = (A>B)|!(A!=B);
                        (2)System.out.println(!(3L>2.4D)&&(7.2F<=7.2D));
                        System.out.println((3L>2.4D)&&(7.2F<=7.2D));
                        System.out.println((!(3L>2.4D)&&(7.2F<=7.2D)));
                        System.out.println((3L>2.4D)&&!(7.2F<=7.2D));
                        2、直接写出下列语句的运行结果
                        (1)System.out.println(!((3L>2.4D)&&(7.2F<=7.2D)&&((3L<5F)&(4F >= 5L))));
                        (2)System.out.println(((3L>2.4D)||(7.2F<=7.2D)||((3L<5F)&&!(4F >= 5L))));


                        IP属地:北京14楼2015-07-26 13:25
                        收起回复
                          看俺JAVA的移位大法!NIcoPoiDuang!自从学了移位运算符之后,妈妈再也不用担心我能学会Java了!可喜可贺!所以,来攻略移位运算符吧!本节高能哦!建议童鞋们做好心理准备Poi!

                          移位运算符有这么多,真是移位大家族。
                          首先我们来温习一下二进制的有关内容(略),然后再来看看二进制的新内容——负数的二进制表示。
                          一个数13的二进制是1101,以byte型为例,为00001101
                          (因为byte型有8位)
                          --求补码,即0换1,1换0,为11110010
                          --加一,为11110011
                          则11110011就是byte型变量-13的值。


                          IP属地:北京15楼2015-07-26 13:52
                          回复
                            那么首先从按位与&说起。呀,这个真心无语。
                            以int型变量5与-4为例
                            5(10)=00000000 00000000 00000000 00000101(2)
                            |-4|(10)=00000000 00000000 00000000 00000100(2)
                            ∴-4(10)=11111111 11111111 11111111 11111100
                            我们让&运算时,两个都为1,结果的相同位置上为1,故其结果为
                            00000000000000000000000000000100=4
                            按位或|正好相反,若两者都为零则输出0,否则输出1
                            以int型变量3与6为例
                            3(10)=00000000 00000000 00000000 00000011
                            6(10)=00000000 00000000 00000000 00000110
                            3|6=00000000 00000000 00000000 00000111(2)=7(10)
                            按位非~则是全反过来
                            如:7(10)=00000000 00000000 00000000 00000111(2)
                            ~7=11111111 11111111 11111111 11111000(2)=8
                            按位异或^是两位相同为0,否则为1
                            如10^3
                            10(10)=00000000 00000000 00000000 00001010(2)
                            3(10)=00000000 00000000 00000000 00000011(2)
                            10^3=00000000 00000000 00000000 00001001(2)=9


                            IP属地:北京16楼2015-07-26 14:15
                            收起回复
                              看累了放个音乐歇歇(手机党学java活该听不上)
                              移位运算符>>/<</>>>
                              首先有没有不分左右的?分不清的你就放弃吧
                              以byte型为例
                              假设有那么一个二进制数00000111(十进制为7),它整体向左拖动就是0000111(),填零补位为1110(十进制为14)
                              所以我们称7<<1=14
                              那么举一反三,7<<2=28
                              。。。。。。
                              我们发现,移位实质是乘二。
                              所以绝对不能超范围!
                              >>则是向右拖动。同理可以得出此应为/2.注意,我们知道负数的第一位必为1,因为正数的第一位必为0,因为取值范围的限制。所以最高位为1填负数,最高位为2填正数。
                              例如:-29>>1=11100011(2)>>1=()1110001,因为最高位为1,补1,则为11110001=-15.
                              所以说这种÷2很麻烦之处就在于它不能保留小数。
                              当然我们也可以÷4什么的
                              那么>>>很好解释,就是无视首位、统一补零的,即|a/2^n|
                              那么,我们可以得出:第一位为0时


                              IP属地:北京17楼2015-07-26 14:43
                              收起回复