目录

think in java 读书笔记 1 ——移位

think in java 读书笔记 2 —— 套接字

think in java 读书笔记 3 —— 数据报

在Think in Java中有这么一段话“对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5个低位才会有用。这样可防止我们在一个int数里移动不切实际的位数。若对一个long值进行处理,最后得到的结果也是long。此时只会用到右侧的6个低位,防止移动超过long值里现成的位数。”

对上面那段话的理解是:移位操作符操作的运算对象是二进制的“位”,int类型是32位也就是2的5次幂 !如果移32位以上,那么原来的数的信息会全部丢失,这样也就没有什么意义了!所以上面的“只有右侧的5个低位才会有用”说的是:移位操作符右端的那个数(化成二进制)的低5位才有用,即 
X < <y; 
是指y的低5位才有用,即不能大于32。 而对于long型也是同样的道理!

 package com.xingle_test.operator;

 /**
*
* @ClassName: shifting 移位操作
* @author Xingle
* @date 2014-7-22 上午9:30:16
*/
public class shifting { public static void main(String[] args) {
int i = 1;
pBinInt("" + i + "", i);
int i_1 = i << 2;
pBinInt("<<2", i_1);
int i_2 = i << 34;
pBinInt("<<34", i_2);
System.out.println(); int k = -1;
pBinInt("" + k + "", k);
int k_1 = k << 2;
pBinInt("<<2", k_1);
int k_2 = k << 34;
pBinInt("<<34", k_2);
System.out.println(); long j = -12;
pBinLong("" + j + "", j);
long j_1 = j >> 2;
pBinLong(">>2", j_1);
long j_2 = j >> 66;
pBinLong(">>66", j_2);
System.out.println(); } /**
* long 打印二进制
*
* @param s
* @param j
* @author xingle
* @data 2014-7-22 上午9:41:17
*/
private static void pBinLong(String s, long l) {
System.out.println(s + ", long: " + l + ", binary: ");
System.out.print(" ");
for (int i = 63; i >= 0; i--)
if (((1L << i) & l) != 0)
System.out.print("1");
else
System.out.print("0");
System.out.println();
} /**
* int 打印二进制
*
* @param s
* @param i
* @author xingle
* @data 2014-7-22 上午9:31:42
*/
private static void pBinInt(String s, int i) {
System.out.println(s + ", int: " + i + ", binary: ");
System.out.print(" ");
for (int j = 31; j >= 0; j--)
if (((1 << j) & i) != 0)
System.out.print("1");
else
System.out.print("0");
System.out.println();
} }

执行结果:

1, int: 1, binary:
00000000000000000000000000000001
<<2, int: 4, binary:
00000000000000000000000000000100
<<34, int: 4, binary:
00000000000000000000000000000100

-1, int: -1, binary:
11111111111111111111111111111111
<<2, int: -4, binary:
11111111111111111111111111111100
<<34, int: -4, binary:
11111111111111111111111111111100

-12, long: -12, binary:
1111111111111111111111111111111111111111111111111111111111110100
>>2, long: -3, binary:
1111111111111111111111111111111111111111111111111111111111111101
>>66, long: -3, binary:
1111111111111111111111111111111111111111111111111111111111111101

从以上结可以看到对于32位的int型,左移2位和左移34位的结果是相同的;

对于long型,左移2位和左移66位的结果是一样的。

在java中无论左移右移,会遵循下面的规则

value<<n(其中value为int,n>=0) 等价于 value<<(n%32)
value>>n (其中value为int,n>=0) 等价于 value>>(n%32)
value>>>n (其中value为int,n>=0) 等价于 value>>>(n%32)
对于long类型的:
value<<n(其中value为long,n>=0) 等价于 value<<(n%64)
value>>n (其中value为long,n>=0) 等价于 value>>(n%64)
value>>>n (其中value为long,n>=0) 等价于 value>>>(n%64)

 /**
* @Title: shifting.java
* @Description: TODO
* @author :Xingle
* @date 2014-7-22 上午9:30:16
* @version
*/ package com.xingle_test.operator; /**
*
* @ClassName: shifting 移位操作
* @author Xingle
* @date 2014-7-22 上午9:30:16
*/
public class shifting { public static void main(String[] args) { int i = 100;
pBinInt("" + i + "", i);
int i_1 = i << -38;
pBinInt("<<-38", i_1);
int i_2 = i << 26;
pBinInt("<<26", i_2);
System.out.println(); int k = -100;
pBinInt("" + k + "", k);
int k_1 = k << -38;
pBinInt("<<-38", k_1);
int k_2 = k << 26;
pBinInt("<<26", k_2);
System.out.println(); long j = 12;
pBinLong("" + j + "", j);
long j_1 = j << -3;
pBinLong("<<-3", j_1);
long j_2 = j << 61;
pBinLong("<<61", j_2);
System.out.println(); long a = -112;
pBinLong("" + a + "", a);
long a_1 = a >>> -67;
pBinLong(">>> -67", a_1);
long a_2 = a >>> 61;
pBinLong(">>> 61", a_2);
System.out.println(); } /**
* long 打印二进制
*
* @param s
* @param j
* @author xingle
* @data 2014-7-22 上午9:41:17
*/
private static void pBinLong(String s, long l) {
System.out.println(s + ", long: " + l + ", binary: ");
System.out.print(" ");
for (int i = 63; i >= 0; i--)
if (((1L << i) & l) != 0)
System.out.print("1");
else
System.out.print("0");
System.out.println();
} /**
* int 打印二进制
*
* @param s
* @param i
* @author xingle
* @data 2014-7-22 上午9:31:42
*/
private static void pBinInt(String s, int i) {
System.out.println(s + ", int: " + i + ", binary: ");
System.out.print(" ");
for (int j = 31; j >= 0; j--)
if (((1 << j) & i) != 0)
System.out.print("1");
else
System.out.print("0");
System.out.println();
} }

执行结果:

100, int: 100, binary:
00000000000000000000000001100100
<<-38, int: -1879048192, binary:
10010000000000000000000000000000
<<26, int: -1879048192, binary:
10010000000000000000000000000000

-100, int: -100, binary:
11111111111111111111111110011100
<<-38, int: 1879048192, binary:
01110000000000000000000000000000
<<26, int: 1879048192, binary:
01110000000000000000000000000000

12, long: 12, binary:
0000000000000000000000000000000000000000000000000000000000001100
<<-3, long: -9223372036854775808, binary:
1000000000000000000000000000000000000000000000000000000000000000
<<61, long: -9223372036854775808, binary:
1000000000000000000000000000000000000000000000000000000000000000

-112, long: -112, binary:
1111111111111111111111111111111111111111111111111111111110010000
>>> -67, long: 7, binary:
0000000000000000000000000000000000000000000000000000000000000111
>>> 61, long: 7, binary:
0000000000000000000000000000000000000000000000000000000000000111

由以上可以看出:

对于int,左移-38和左移26是相等的;

对于long,左移-3和左移61是相等的;

对于无符号右移,右移-67和右移61是相等的;

结论:

value << -n(value为int,n>=0) 等价于 value << (-n & 31)
value >> -n(value为int,n>=0) 等价于 value >> (-n & 31)
value >>> -n(value为int,n>=0) 等价于 value >>> (-n & 31)
而对于long
value << -n(value为long,n>=0) 等价于 value << (-n & 63)
value >> -n(value为long,n>=0) 等价于 value >> (-n & 63)
value >>> -n(value为long,n>=0) 等价于 value >>> (-n & 63)

think in java 读书笔记 1 ——移位的更多相关文章

  1. think in java 读书笔记 3 —— 数据报

    目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 概要 1. 数据报基本知识 2 ...

  2. think in java 读书笔记 2 —— 套接字

    目录 think in java 读书笔记 1 ——移位 think in java 读书笔记 2 —— 套接字 think in java 读书笔记 3 —— 数据报 概要 1. 套接字基本知识 2 ...

  3. Thinking In Java读书笔记--对象导论

    Thinking In Java读书笔记--对象导论[对象]服务提供者==>将对象看做一个服务提供者[程序员分类][类创造者]/[客户端程序员] [访问控制存在的原因?][1]客户端程序员无法触 ...

  4. head first java读书笔记

    head first java读书笔记 1. 基本信息 页数:689 阅读起止日期:20170104-20170215 2. 标签 Java入门 3. 价值 8分 4. 主题 使用面向对象的思路介绍J ...

  5. Java读书笔记1

    Java逍遥游记读书笔记 前言 必须先来一句,这是入门级别,高手勿喷~ 写Android的时候总有一些语句不是很理解,其实大部分是Java的内容,所以想系统的学下Java. 这本书——<Java ...

  6. java读书笔记二

    这是我的一些读书笔记: 我研究了一下面向对象: 面向对象符合人类看待事物的一般规律,对象的方法的实现细节是包装的,只有对象方法的实现者了解细节 我觉得面向过程是由过程.步骤.函数组成,过程是核心,面向 ...

  7. Effective Java读书笔记完结啦

    Effective Java是一本经典的书, 很实用的Java进阶读物, 提供了各个方面的best practices. 最近终于做完了Effective Java的读书笔记, 发布出来与大家共享. ...

  8. Effective java读书笔记

    2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己 计在16年要看12本书,主要涉及java基础.Spring研究.java并发.J ...

  9. 【java读书笔记】——java开篇宏观把控 + HelloWorld

    学完java有一段时间了,一直没有做对应的总结,总认为有一种缺憾.从这篇博客開始,将自己平时的学习笔记进行总结归纳,分享给大家. 这篇博客主要简单的介绍一下java的基础知识,基本的目的是扫盲.原来仅 ...

随机推荐

  1. DataSet.Clear Method ()

    Clears the DataSet of any data by removing all rows in all tables. 需要注意的是这个方法不会清空DataSet中的DataTable, ...

  2. shell应用——主控脚本实现(1)

    shell脚本作用:内网ip,公网ip :cpu负载,内存使用量:ngix和mysql...

  3. Native SQL

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  4. CUBRID学习笔记 21 查看主键外键索引

    命令 show create table game; game是表名 在web管理中,请在sql标签中查,不要在query中执行. show create table game; === <Re ...

  5. hdu 3535 AreYouBusy 分组背包

    AreYouBusy Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Probl ...

  6. Oracle PLSQL语句实例

    /** * plsql:某个项目对效率要求比较高的时候用,一般不用,大多数项目写的是夸数据库平台的,用不上. * pssql大多数能做的东西,java都能替代它.在某些特殊的地方要求用plsql的时候 ...

  7. [转载] goroutine背后的系统知识

    原文: http://www.sizeofvoid.net/goroutine-under-the-hood/ 文章写的非常好, 对内部原理解释的非常清楚, 是我喜欢的风格, 感谢作者的精彩文章. = ...

  8. hdu4720Naive and Silly Muggles

    链接 一直理解的最小覆盖圆就是外接圆..原来还要分钝角和锐角... 钝角的话就为最长边的中点,对于这题分别枚举一下外接圆以及中点的圆,判一下是不是在园外. #include <iostream& ...

  9. php flush()刷新不能输出缓冲的原因分析

    在php程序编写中,flush()的使用率还是挺高的,它在网页表现即时信息效果时发挥了极为重要的作用,比如之前写的php实现限制文件下载速度的代码实例,flush()就起了举足轻重的作用,是进度条实现 ...

  10. C/C++中static关键字作用总结

    来来来,来看这篇文章: http://www.cnblogs.com/biyeymyhjob/archive/2012/07/19/2598815.html 总结一下: 1.先来介绍它的第一条也是最重 ...