java程序猿如何练习java版的易筋经?
故事背景
电视剧《天龙八部》中,阿朱易容后进入少林寺偷走了《易筋经》,她一直想把这本书送给乔峰。耿直的乔峰觉得此书来历不正,不肯接受。几番波折,这本书最后落到聚贤庄庄主游坦之手里。怪人游坦之靠着《易筋经》练就神功,后来甚至能和乔峰抗衡.
《易筋经》的功夫圜一身之脉络,系五脏之精神,周而不散,行而不断,气自内生,血从外润。练成此经后,心动而力发,一攒一放,自然而施,不觉其出而自出,如潮之涨,似雷之发。练那《易筋经》,便如一叶小舟于大海巨涛之中,怒浪澎湃之际,小舟自然抛高伏低,何尝用力?若要用力,又哪有力道可用?又从何处用起?
java版的易筋经<The Java® Language Specification>
《易筋经》练法古拙朴实,修聚而得的内力也是无可撼动,根基之稳,于「三大神功」中称得第一。修习java,内功首推jsl,招式也要练起,不然内功无法表现出来。我们举例来说,在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
其中的术语如下:
原码:将一个整数,转换成二进制,就是其原码。如单字节的5的原码为:0000 0101;-5的原码为1000 0101。
反码:正数的反码就是其原码;负数的反码是将原码中,除符号位以外,每一位取反。如单字节的5的反码为:0000 0101;-5的反码为1111 1010。
补码:正数的补码就是其原码;负数的反码+1就是补码。如单字节的5的补码00000101;-5的补码1111 1011。
总结一句话,正数的原码=反码=补码,负数的原码!=反码,反码+1=补码
我们来 看看JSL3中关于int的描述
All decimal literals from 0 to 2147483647 may appear anywhere an int literal may appear. The decimal literal 2147483648 may appear only as the operand of the unary minus operator - (§15.15.4).
It is a compile-time error if the decimal literal 2147483648 appears anywhere other than as the operand of the unary minus operator; or if a decimal literal of type int is larger than 2147483648 (231).
The largest positive hexadecimal, octal, and binary literals of type int - each of which represents the decimal value 2147483647 (2^31-1) - are respectively:
0x7fff_ffff,
0177_7777_7777, and
0b0111_1111_1111_1111_1111_1111_1111_1111
The most negative hexadecimal, octal, and binary literals of type int - each of which represents the decimal value -2147483648 (-2^31) - are respectively:
0x8000_0000,
0200_0000_0000, and
0b1000_0000_0000_0000_0000_0000_0000_0000
The following hexadecimal, octal, and binary literals represent the decimal value -1:
0xffff_ffff,
0377_7777_7777, and
0b1111_1111_1111_1111_1111_1111_1111_1111
It is a compile-time error if a hexadecimal, octal, or binary int literal does not fit in 32 bits.
注意,为了便于观察,java支持使用"_"分割2进制,8进制,16进制,还有10进制数,下面的程序编译不会报错哦
public static void main(String[] args) {
int i=0b1000_0000_0000_0000_0000_0000_0000_0000;
int j=0200_0000_0000;
int k=0x8000_0000;
int m=500_000;
}
回到原码,反码,补码来上来看:
-1的原码:0b1000_0000_0000_0000_0000_0000_0000_0001 -1的反码:0b1111_1111_1111_1111_1111_1111_1111_1110 -1的补码:0b1111_1111_1111_1111_1111_1111_1111_1111
我们来验证一下-1在计算机中是否以补码表示:
public static void main(String[] args) {
System.out.println(Integer.toBinaryString(-1));
}
结果为:
11111111111111111111111111111111
同样,我们还可以验证各种类型的值,如下面程序所示:
public static void main(String[] args) {
System.out.println(Integer.toBinaryString((Byte.MAX_VALUE & 0xFF) + 0x100).substring(1));
System.out.println(Integer.toBinaryString((Byte.MIN_VALUE & 0xFF) + 0x100).substring(1));
System.out.println(Integer.toBinaryString(((byte)5 & 0xFF) + 0x100).substring(1));
System.out.println(Integer.toBinaryString(((byte)-5 & 0xFF) + 0x100).substring(1));
System.out.println(Integer.toBinaryString((Character.MAX_VALUE&0xFFFF)+0x10000).substring(1));
System.out.println(Integer.toBinaryString((Character.MIN_VALUE&0xFFFF)+0x10000).substring(1));
System.out.println(Integer.toBinaryString(((char)5&0xFFFF)+0x10000).substring(1));
System.out.println(Integer.toBinaryString(((char)-5&0xFFFF)+0x10000).substring(1));
System.out.println(Integer.toBinaryString((Short.MAX_VALUE&0xFFFF)+0x10000).substring(1));
System.out.println(Integer.toBinaryString((Short.MIN_VALUE&0xFFFF)+0x10000).substring(1));
System.out.println(Integer.toBinaryString(((short)5&0xFFFF)+0x10000).substring(1));
System.out.println(Integer.toBinaryString(((short)-5&0xFFFF)+0x10000).substring(1));
System.out.println(Integer.toBinaryString(Integer.MAX_VALUE));
System.out.println(Integer.toBinaryString(Integer.MIN_VALUE));
System.out.println(Integer.toBinaryString(5));
System.out.println(Integer.toBinaryString(-5));
}
输出结果:
01111111
10000000
00000101
11111011
1111111111111111
0000000000000000
0000000000000101
1111111111111011
0111111111111111
1000000000000000
0000000000000101
1111111111111011
1111111111111111111111111111111
10000000000000000000000000000000
101
11111111111111111111111111111011
也满足补码的规则。
参考资料
【1】https://baike.baidu.com/item/%E6%98%93%E7%AD%8B%E7%BB%8F/20234647?fr=aladdin
【2】https://docs.oracle.com/javase/specs/jls/se12/html/jls-3.html#jls-HexNumeral
java程序猿如何练习java版的易筋经?的更多相关文章
- [转] java书籍(给Java程序猿们推荐一些值得一看的好书 + 7本免费的Java电子书和教程 )
7本免费的Java电子书和教程 1. Thinking in Java (Third Edition) 本书的作者是Bruce Eckel,它一直都是Java最畅销的免费电子书.这本书可以帮助你系统的 ...
- 回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议
引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...
- zx一篇让Java程序猿随时可以翻看的Oracle总结
一篇让Java程序猿随时可以翻看的Oracle总结 前言:Oracle学习也有十几天了,但是呢,接下来还要学习许多其他的东西,并不能提步不前,所以在此总结了以下Oracle中常用的命令和语句,没有语法 ...
- 给Java程序猿们推荐一些值得一看的好书
学习的最好途径就是看书 "学习的最好途径就是看书",这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 1.能出版出来的书一定是经过反复的思考.雕琢和审核的 ...
- JAVA程序猿怎么才干高速查找到学习资料?
JAVA程序猿怎么才干高速查找到学习资料? JAVA学习资料在互联网上较为零散,并且大多是英文的.以下介绍3种方式,让程序猿能够高速地找到自己想要的资料. 一.导航站点: 有非常多类似hao123的站 ...
- Java程序猿的JavaScript学习笔记(汇总文件夹)
最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ...
- Java程序猿的JavaScript学习笔记(8——jQuery选择器)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿JavaScript学习笔记(2——复制和继承财产)
计划和完成在这个例子中,音符的以下序列: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaSc ...
- Java程序猿从笨鸟到菜鸟之(九十二)深入java虚拟机(一)——java虚拟机底层结构具体解释
本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 在曾经的博客里面,我们介绍了在java领域中大部分的知识点,从最基础的java最基本的语法 ...
随机推荐
- 利用python定位网页上的元素
1. 想对网页上的元素进行操作,首先需要定位到元素. 以百度首页为例: 输入以下代码,打开百度首页: # coding = gbk from selenium import webdriver chr ...
- Eclipse批量注释、批量缩进、批量取消缩进技巧
1.批量注释:选中若干行,按"Ctrl"+"/" 2.批量缩进:选中若干行,按TAB 3.批量取消缩进:选中若干行,按SHIFT+TAB
- bzoj 1051 [HAOI2006]受欢迎的牛(tarjan缩点)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1051 题解:缩点之后判断出度为0的有几个,只有一个那么输出那个强连通块的点数,否者 ...
- kick start 2019 round D T2题解
题目大意:由N个房子围成一个环,G个人分别顺时针/逆时针在房子上走,一共走M分钟,每分钟结束,每个人顺/逆时针走到相邻的房子.对于每个房子都会记录最后时刻到达的人(可能是一群人).最终输出每个人会被几 ...
- django中使用事务以及接入支付宝支付功能
之前一直想记录一下在项目中使用到的事务以及支付宝支付功能,自己一直犯懒没有完,趁今天有点兴致,在这记录一下. 商城项目必备的就是支付订单的功能,所以就会涉及到订单的保存以及支付接口的引入.先来看看订单 ...
- 题解 yzoj1663: 愤怒的牛(二分) yzoj1662: 曲线(三分)
话说二分和三分的题还没有整理过,就趁这两题来整理下笔记 先讲讲关于二分,对于二分的具体边界长期以来对我来说都是个玄学问题,都是边调边拍改对的.思路大体是确定左边界l,和有边界r,判断满足条件缩小范围. ...
- 洛谷p2015二叉苹果树&yzoj1856多叉苹果树题解
二叉 多叉 有一棵苹果树,如果树枝有分叉,可以是分多叉,分叉数k>=0(就是说儿子的结点数大于等于0)这棵树共有N个结点(叶子点或者树枝分叉点),编号为1~N,树根编号一定是1.我们用一根树枝两 ...
- 漫谈Spring Security 在Spring Boot 2.x endpoints中的应用(一)
Spring Boot 2.x极大简化了默认的安全配置,并不是说有很多安全相关的配置,现在你只需要提供一个WebSecurityConfigurerAdapter继承类这样一个简单的操作,Spring ...
- 【Nginx】基础学习概览【汇总】
一.Nginx 简介安装启动 二.Nginx的应用场景 三.Nginx中的配置命令 四.实现动态负载均衡 五.四层负载均衡 六.主从热备 七.动静分离 一.Nginx 简介安装启动 [Nginx]简介 ...
- Java SSM三端分离开发在线教育平台实战视频教程
目录: 1-01——在线网校实战课程介绍1-02——Eclipse.Maven.JDK介绍1-03——Maven构建Project1-04——新浪SAE介绍2-01——平台业务结构概览2-02——平台 ...