从零学java笔录-第10篇 数据类型(四)

本文是《凯哥陪你学系列之java基础篇》

感谢:

感谢网友:志远162。在上一篇<从零学java笔录-第9篇 数据类型(三)>中对错误指出。

在上篇中模运算正负号和分子保持一致而不是分母。希望大家记住

本篇主要内容:

1:比较运算

2:逻辑运算

3:位运算

4:三元运算

1: 比较运算:

比较运算符:等于,不等于,大于,大于等于,小于,小于等于。

在java中比较两个数等于使用的是双等号。比如 3==2

注意:比较运算符运算的结果是true或是false。

其中 instanceof这个先不用管。这个以后学习中需要的

2 逻辑运算符

Java中逻辑运算

逻辑运算符的作用:

用于连接两个boolean类型的表达式。

比如在数学中我们 2

但是 如果写出 x>2,x<5 这两个表达式和 2

所以就出现了逻辑运算符。

那么用java表达 x>2 其 x<5怎么表达?

(x>2 & x<5)这样就OK了。

代码演示:

class LogicDemo{

public static void main (String [] args){

int a = 3;

int b = 6;

System.out.println(a>2&a<5);

System.out.println(b>2&b<5);

}

}

运行结果:

分析原因:

System.out.println(a>2&a<5);为什么是true?

因为: a=3.而3>2.&符号左边是true 。又因为 3<5 .&符号右边是true.

所以&符号左右两边都是true。所以就是true.

System.out.println(b>2&b<5);为什么是false?

因为: b=6.而6>2.&符号左边是true 。而右边 6<5是false.

所以&符号左右两边就是 true和false。而输出的是false.

所以我们可以总结出&符号的特点

总结与(&):

&:与 或是叫 且。而且的意思

总结与(&):

&:与 或是叫 且。而且的意思

文字表达:

true & true = true;

true & false = false;

false & true = false;

false & false = false;

规律:

&符号:两边只要有一边是false结果必为false.

只有两边都是true,结果才是true。

总结与(|)

l:与、或者。就是或者的意思

文字表达:

true & true = true;

true & false = true;

false & true = true;

false & false = true;

规律:

|符号:两边只要有一边是true结果必为tr.ue

只有两边都是false,结果才是false。

与和或使用场景

当要取中间值或是数据(也就是区间值)的时候使用 & 。

比如 想要3 和4 那么就是 2

当要取不是区间值,使用或

比如 想要不是 3和4 那么就是 x<2 | x>5。取小于2或者是大于5的数

总结异或(^)

异或:

true & true = false;

true & false = true;

false & true = true;

false & false = true;

^和|的区别:

或是 两边都是真的时候结果依然为真

但是异或,两边都是真的时候 结果却为false.

总结非运算(!)

非运算取相反的值。

!ture = false;

!false = true;

短路逻辑运算:(面试题)

&& 双与其特点和单个&特点相同的。

但是只要有一边为假就不比较另一边了。

比如:int i = 1;

i>2 && i<5;

这个运算过程就是,先比较 1>2 结果是false.当使用&& 的时候就不在比较右边了。

但是如果使用& 还需要比较右边。所以&& 起到短路效果。

|| 和 |的效果是一样。但是||起到短路效果的。

为什么会出现 &&或是是||?

因为这个从效率上来讲比单&效率高。

&&和&区别:

&& 只能做逻辑运算符,起到短路效果。

& 不仅是逻辑运算符还是位运算符。

&:无论左边结果是什么,右边都参与运算。

&&:当左边是false时候,右边就不参与运算了。

||和|

|:无论左边结果是什么,右边都参与运算

||:如果左边是真,右边不参与运算。

|:还是位运算的

位运算符

Java中位运算符:

与运算:

6&3.

因为位运算直接对应的是二进制。

而我们知道6和3是int类型。而int类型在内存中是4个字节。32位二进制。

所以,6&3在内存中:

简写:

分析为什么 6&3 结果是十进制的2

0:false

1:true

而我们有知道&运算的特点。只要有一个为false结果必为false.

所以运算的结果就是二进制的010 对应的十进制就是2

同理 6|3 = 7

异或运算:

根据异或特点:两边相同即为假,两边不同才为真。

所以 6^3 = 5

6^3^3=6

所以,异或特点:

当一个数异或两一个数两次后,结果还是这个数本身。

异或作用:

作为加密的一种方式。

比如数字6 先用3异或一次后得到新的二进制。然后在网络上传输。等接受方拿到异或后的新二进制在和3进行异或后,就得到原来的数据6了。

反码:

其实就是取反后的二进制码

6的反码(~6): 是-7

理解:

反码就是取反后在加1.

左移:

3>>2:含义 3左移两位:

在内存中处理过程:

3在内存中完整的表示方式:

说明:两边的||表示在内存中临界边。

左移两位

得到新的二进制就是1100 转成十进制就是12

那么3<<3 = 24

分析原因:

因为这里操作的是二进制。所以左移一位就是2的1次方。左移3位就是2(3)

所以 :

总结:

左移N位其实就是该数乘以2的N次幂

所以 <<可以完成2的N次幂运算

右移:

6>>1 =

6在内存中二进制:

右移一位:

右移一位后,最高位就空出一位。注意这里不能直接用0补。

如果是整数,使用0补,如果是负数使用1补。

也就是:原数据最高位是什么,右移后,最高位和原数据最高位相同。

对应二进制变成110对应的十进制就是3.

6>>2=1

找规律:

右移N位,其实就是该数除以2的N次幂

无符号右移:>>>

无符号右移与右移区别:

无符号右移,无论原数据最高位是什么,右移完成后最高位都用0补。

注意:

左移和右移,都操作的是二进制数据。

位运算练习:

练习1:

最优效率的方式算出2乘以8等于几?

内存中运算过程

分析得到 8=2(3).8等于2的3次方

所以 2*8 = 2*2(3)

2在内存中二进制表现:

2(3):2的3次方其实就是2左移3位。即时:2<<3

2的二进制左移三位后:

后面不够用0补全。

结果

有效的就是10000对应的十进制就是16。

所以代码:

练习2:

对两个整数变量的值进行互换(注意:不需要第三方变量)

分析:

正常的,使用第三方变量互换原理。

题目明确不能使用第三方变量。

方式1:

int a = 3,b = 5;

分析:

a =  a+b; //此时a = 8

b =  a-b;//此时b = 8-5 = 3

a =  a – b;//因为在上一步 b = 3 所以此时 a = 8-3 = 5.

这样输出的 a = 5,b=3.a 和 b就互换了。

虽然使用这种方式也可实现a与b的互换。但是如果a和b都比较大

那么 a+b就有可能超出int范围。这样就会出现类型强制转换或是精度丢失的错误。

方案二:

使用异或运算。

从上面讲解我们知道 一个数异或另一个数两次之后,结果还是这个数的本身。

所以:

分析原因:

a = a^b;    //这个没什么说的 此时a = a^b了

b = a^b;    //这个时候因为上一步 a= a^b了。此时 b = ((a^b)^b)。其实 b = a

a = a^b;    //有第一步 a = a^b ,有第二步 b = a。所以此时 a =( (a^b)^a).其实就是 a =b

将a b数据带入:

三元运算符

三元运算符(三目运算):三个元素参与运算的符号。

代码:

练习:

需求:比较两个整数,输出其中交大的

代码:

/**

三元运算符练习:

需求:

比较两个整数,输出其中交大的

**/

class OperatTest{

public static void main (String [] args){

int a = 5;

int b = 3;

System.out.println("a,b中较大的值为:"+ (a>b?a:b));

}

}

输出结果为:

练习二:

需求:求三个整数中较大的。

代码(部分):

//求三个整数中较大的。

int o =3,p =6,q = 1;

int temp = (o>p?o:p);

int max = temp>q?temp:q;

System.out.println("三个数中较大的值为:"+ max);

结果:

ps:欢迎关注凯哥微信公众号:凯哥Java

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容