Java中的二进制及基本的位运算 二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数.它的基数为2,进位规则是"逢二进一",借位规则是"借一当二",由18世纪德国数理哲学大师莱布尼兹发现.当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的.计算机中的二进制则是一个非常微小的开关,用"开"来表示1,"关"来表示0. 那么Java中的二进制又是怎么样的呢?让我们一起来揭开它神…
目录 还有一个故事--(平行世界篇) 还有一个美丽的梦幻家园:java.util 并且还有一个善战的达拉崩巴:HashSet 还有另外一个故事(不是虚假传说) 还有一对涂满毒药的夺命双匕:equals和hashCode 但是为什么这次标题里没有==的故事了?? 那hashCode呢?? 那把骑士圣剑呢?? 然后崩巴也准备开启营救公主的冒险 本文地址:https://www.cnblogs.com/oberon-zjt0806/p/12367370.html 本文遵循CC BY-NC-SA 4.0…
public static void main(String[] args) { /* * &:与运算 * 全为1则为1,否则为0 */ System.out.print(1 & 0); System.out.print("--"); System.out.print(1 & 1); System.out.print("--"); System.out.println(0 & 0); // out:0--1--0 /* * |:或运算…
float x = 302.01f;    System.out.println(x == 302.01); //false  System.out.println(x == 302.01f); //true    double y = 302.01;  System.out.println(y == 302.01); //true  System.out.println(y == 302.01f); //false    float z = 302.00f;  System.out.print…
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public static void main(String[] args) { int numA = 10; // 定义int型变量 int numB = 20; // 定义int型变量 int max = 0; // 用if语句替代:int max = numA > numB ? numA : numB;…
位运算指的是针对整数的二进制进行的位移操作. 位运算提供比算术运算更高的效率,但是位运算的代码可读性较差,建议所有使用位运算的地方写上注释. Java中提供7个位运算符用于位运算. 左移(<<) 左移运算是将操作数二进制值逐位左移若干位,左移过程中符号位不变,高位溢出则舍弃,低位则补0. 范例 结果 范例 结果 00000001<<2 00000100 10000001<<2 10000100 01100001<<2 00000100 11100001<…
从20世纪70年代末到80年代末,Digital Equipment的VAX计算机是一种非常流行的机型.它没有布尔运算AND和OR指令,只有bis(位设置)和bic(位清除)这两种指令.两种指令的输入都是一个数据字x和一个掩码字m.它们生成一个结果z,z是由根据掩码m的位来修改x的位得到的.使用bis指令,这种修改就是在m为1的每个位置上,将z对应的位设置为1.使用bic指令,这种修改就是在m为1的每个位置,将z对应的位设置为0. 为了看清楚这些运算与C语言位级运算的关系,假设我们有两个函数bi…
一.基本类型介绍 关键字 数据类型 占用字节数 取值范围 默认值 byte 字节型 1个字节 -128~127 0 char 字符型 2个字节 Unicode0~Unicode215-1 \u0000 short 短整型 2个字节 -215~215-1 0 int 整型 4个字节 -231~231-1 0 long 长整型 8个字节 -263~263-1 0 float 单精度浮点数 4个字节 -2128~2128 0.0 double 双精度浮点数 8个字节 -21024~21024 0.0…
问题: 最近在做Java web项目中需要计算金额总和,在这里出现了一个问题是我以前没有关注到的: System.out.println(2.0-1.1); 执行时候的console中打印输出的是 0.8999999999999999 而不是正常计算出2.0-1.1=0.9这个答案, 原因: 对此我找了一些解答,主要是二进制机器在处理十分之一(0.1)上出现的问题. 主要问题出在小数的二进制表示上: 这里参考了这篇博客所讲的:http://hxraid.iteye.com/blog/504293…
「WTF系列」深入Java中的位操作 关于WTF系列 引 学完本章节你将学会位的基础概念与语法,并且还会一些骚操作!! 与.或.非.位移 原码.反码.补码 字节.位.超区间...... 开始本章节之前,我们先思考一个问题: byte a = 33; byte b = -3; 若我们输出a.b的二进制字符串是多少? 答案是这样的么? a->// 00100001 b->// 10100001 当然同学们可能会觉得我既然问了就肯定不是这样:是吧-别着急你们试试就知道了. 在Java中输出一个值对应…
取模就是返回余数. 取模的作用主要是来取奇偶数来用的,奇数干嘛,偶数干嘛. 比较运算符: 赋值运算: 逻辑运算: 赋值的时候可以多个变量同时赋值 成员运算: in就是在不在的意思. 身份运算: 位运算: 二进制运算: &就是and运算 |或运算就是or 异或运算就是^,正好相反,相同为0,不通为1 按位取反运算~,取60的按位取反,就是0变成1,1变成0 所以~60=195,但是实际情况呢得到-61,都是负值 因为计算机都是按195-256=-61得到的值显示的负值 左移右移的应用场景 右移一位…
正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段. 大家都知道,正则表达式是一种可以…
我们应该都知道i++和++i的区别是: ++i是先执行 i = i +1 再使用 i 的值,而 i++ 是先使用 i 的值再执行 i = i + 1: for循环的执行顺序如下: for(a;b;c) { d; } 进入循环执行a://只是进入的时候执行 执行b; //条件为真才执行d,不然跳出for了 执行d: 执行c: 再回到第2步开始执行 来看下面的实例: for(int i = 0; i < 10;i++){ System.out.println(i); } 相当于: for(int i…
版权声明一:本文为博主原创文章,转载请附上原文出处链接和本声明.版权声明二:本网站的所有作品会及时更新,欢迎大家阅读后发表评论,以利作品的完善.版权声明三:对不遵守本声明或其他违法.恶意使用本网内容者,保留追究其法律责任的权利.本文链接:https://home.cnblogs.com/u/zak24/ Java中的「与运算 & 」 规则 :都为1时才为1,否则为0 即:两位同时为“1”,结果才为“1”,否则为0 例如:     public static void main(String ar…
  //与运算 &  规则 :都为1时才为1        System.out.println( 7 & 9);        /*         *  7二进制 0111             *  9二进制 1001         * -----------          *        0001   ==1         * */                //或运算 | 规则:有一个为1,则为1        System.out.println(7 | 9);…
今天看到一位大神的博客,深受感触.决定也发一篇博客,证明一下我还活着. 于是我翻看以前学习时做的一些笔记,整理了一下,得到了一个关于异或运算交换变量变量值的笔记. 首先来看下面三组表达式,看起来他们都能实现交换两个变量的值. a = a ^ b; b = a ^ b; a = a ^ b; a = a ^ (b = b ^ (a = a ^ b)); a ^= b ^= a ^= b; 可实际的情况是,前面2组表达式,在C.C++.Java中都能顺利完成变量值的交换.而第3组表达式,却只在C.C…
计算机编码: 原码 符号位为0表示正数,为1表示负数: 其余各位等同于真值的绝对值. 如:0000 0000 0000 0010 =2,1000 0000 0000 0010 =-2 反码 符号位的用法及正数的表示与“原码”一样: 负数的表示是在“原码”表示的基础上通过将符号位以外的各位取反来获得的. 如:0000 0000 0000 0010 = 2,1111 1111 1111 1101 = -2 补码 符号位的用法及正数的表示与“原码”一样: 负数的表示是在“反码”的基础上通过加1来获得的…
java运算符 与(&).非(~).或(|).异或(^)   最近看HashMap源码,遇到了这样一段代码: 1 static final int hash(Object key) { 2 int h; 3 return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); 4 } 于是我整理学习了以下知识:1.十进制转二进制 原理:给定的数循环除以2,直到商为0或者1为止.将每一步除的结果的余数记录下来,然后反过来就得到相…
众所周知,计算机底层是二进制.而java作为一门计算机编程语言,也对二进制的位运算提供了完整的支持. 在java中,int是32位的,也就是说可以用来实现32位的位运算.方便起见,我们一般用16进制对它赋值,比如: 0011表示成16进制是 0x3, 110111表示成16进制是 0x37. 那么什么是位运算呢?位运算是将数据看做二进制,进行位级别的操作.主要有移位运算和逻辑运算 移位运算: 左移:操作符为<<,向左移动,右边的低位补0,左边高位舍弃,将二进制看做整数,左移1位就相当于乘以2.…
Java中的递归运算是一种在自己的方法内部调用自己的方法 递归的设计思想是:把一个复杂的问题,分解为若干个等同的子问题,重复执行,直到之问题能够简单到直接求解,这样复杂的问题就得以解决. 递归运算有两个特点:第一,递归的出口:第二,逐步向出口逼近的递推方法 example:求1+2+3+4+5的和 public class Test { public Integer sum(int n) { if(n == 1 || n == 0) { return n; } return n + sum(n-…
标题     在Java中实现浮点数的精确计算    AYellow(原作) 修改    关键字     Java 浮点数 精确计算   问题的提出:如果我们编译运行下面这个程序会看到什么?public class Test{    public static void main(String args[]){        System.out.println(0.05+0.01);        System.out.println(1.0-0.42);        System.out.…
Java中的Bigdecimal类型运算 双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更小的数进行运算和处理.Java在java.math包中提 供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.表5.7中列出了BigDecimal类的主要构造器和方法. 构造器  描 述 BigDecimal(int)创建一个具有参数所指定整数值的对象. BigDecimal(double)创建一个具有参数所指定双精度值的对象. BigDecimal(…
在剖析该问题前请看如下代码 public static String bytes2HexString(byte[] b) {  String ret = "";  for (int i = 0; i < b.length; i++) {   String hex = Integer.toHexString(b[i] & 0xFF);   if (hex.length() == 1) {    hex = '0' + hex;   }   ret += hex.toUppe…
Java Java double:浮点数:精确计算  public class Test{    public static void main(String args[]){        System.out.println(0.05+0.01);        System.out.println(1.0-0.42);        System.out.println(4.015*100);        System.out.println(123.3/100);    }};你没有看…
一.  关于浮点运算,需要说明的几点: 1.  在java中,进行浮点运算并不会处理例外情况,所以,即使除数为0,也不会有例外被抛出; 2.  当运算结果是溢出(Infinity)时,结果为Infinity;下溢时,则结果为0:若结果是数学上是未定义的,则结果为NaN(not a number); 3.  所有和NaN有关的运算其结果总是NaN; 4.  由于NaN是无序的,所以,和NaN进行数值比较时,其结果总是false. 二.  例子: public class floattest { p…
问题: 对两个double类型的值进行运算,有时会出现结果值异常的问题.比如: System.out.println(19.99+20); System.out.println(1.0-0.66); System.out.println(0.033*100); System.out.println(12.3/100); 输出: 39.9899999999999950.339999999999999973.30000000000000030.12300000000000001 解决方法: Java…
一. 计算机的小数计算一定范围内精确,超过范围只能取近似值: 计算机存储的浮点数受存储bit位数影响,只能保证一定范围内精准,超过bit范围的只能取近似值. java中各类型的精度范围参见:http://blog.csdn.net/longshenlmj/article/details/47616481 编程时注意: doulbe类型的数,不能用等号判定是否相等(或者是一定范围内可以).因为两次同样的计算(除法)结果可能出现小数部分不同.甚至极端的时候,初始化两个小数时,都可能不相等(用数值和字…
1byte(字节)=8bit(比特) 1 0 0 0 0 0 0 0 1   2进制的1的原码 反码 补码 0 0 0 0 0 0 0 0   2进制的0的原码 反码 补码 -1 1 0 0 0 0 0 0 1 计算机中真正参与运算的是  补码! 在java中所有的数字都是有符号的!  符号就是  正 0   负 1 最高位(最左边的)的 0和1 就是 符号位 什么是最高位? 就是最左边的数字! java中最小的单位是 byte(字节) 生活中我们买了一个50G的内存条! 插入到我们的电脑中 有…
在剖析该问题前请看如下代码public static String bytes2HexString(byte[] b) {  String ret = "";  for (int i = 0; i < b.length; i++) {   String hex = Integer.toHexString(b[ i ] & 0xFF);   if (hex.length() == 1) {    hex = '0' + hex;   }   ret += hex.toUpp…
最近在使用Java中需要使用PQ形式的私钥进行RSA加解密运算,本来以为Java中应该很多类似的例子,发现所有的例子都是从ND形式的私钥,竟然没有人用分量P和Q计算N和D进行运算.对Java使用RSA运算不太熟,只能自己一点一点搞了.身边的Java 的仙们,好像身边都没人中国剩余定理,所以也不会遇到P和Q?不管他们了,开工了. 1.BigInteger类 Java中有现成的大数运算的BigInteger类,直接使用这个类进行运算即可,总结一下使用中遇到的坑.Java的大数多1bit表示符号,所以…