java 位移,二进制、八进制、十进制、十六进制,超详解析!适合初学者!

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 如果有不妥之处,请给予留言纠正,谢谢!本文仅限于学习。  1.进制间的转换 [java] view plaincopyprint? public class HexConversion   {          /**       * TODO 进制转换。       *        * @param

如果有不妥之处,请给予留言纠正,谢谢!本文仅限于学习。

 1.进制间的转换

[java]  view plain copy print ?
  1. public class HexConversion  
  2. {  
  3.   
  4.     /** 
  5.      * TODO 进制转换。 
  6.      *  
  7.      * @param args 
  8.      */  
  9.     public static void main(String[] args)  
  10.     {  
  11.         /** 
  12.          * 基本原理 二进制——>十进制 
  13.            *  
  14.          * 1101(2)=1*2^0+0*2^1+1*2^2+1*2^3=1+0+4+8=13 
  15.          *  
  16.          * 八进制——>十进制 
  17.            *  
  18.          * 1101(8)=1*8^0+0*8^1+1*8^2+1*8^3=1+0+64+512=577 
  19.          *  
  20.          * 425(8) = 5*8^0+2*8^1+4*8^2 = 5+16+256=277 
  21.          *  
  22.          * 十六进制——>十进制 
  23.          *  
  24.          * 1101(16)=1*16^0+0*16^1+1*16^2+1*16^3=1+256+4096=4353 
  25.          *  
  26.          * AF(16) = 15*16^0 + 10*16^1 = 15+160=175 
  27.          *  
  28.          * 二进制——>八进制 
  29.           *  
  30.          * (1100100)2=(001 100 100)2=(1 4 4)8=(9)2 
  31.          *  
  32.          * 二进制——>十六进制 
  33.           *  
  34.          * 1000 1001 1010 1011 1100 1101 1110 1111 =(89ABCDEF)16 
  35.          */  
  36.           
  37.         //十进制的10格式化成16进制输出 "\n"换行  
  38.         System.out.printf("%x \n"10);  
  39.   
  40.         /** 
  41.          * 十进制转二进制 
  42.          *  
  43.          * 4的二进制为100,2等于10  
  44.          *  
  45.          * 十进制18等于二进制4*4+2 = 10000+10  
  46.          *  
  47.          * result 10010 
  48.          */  
  49.         System.out.println("数值:为18的十进制转二进制:"+Integer.toBinaryString(18));  
  50.           
  51.         /** 
  52.          * 方法二: 
  53.          *  求102.8125的二进制 
  54.          * 根据十进制转二进制换算 
  55.          * 25除以2   12余1 
  56.          * 12除以2    6余0 
  57.          * 6除以2     3余0 
  58.          * 3除以2     1余1 
  59.          * 1除以2     0余1 
  60.          * 十进制25的二进制为11001 
  61.          *  
  62.          * 十进制0.8125的二进制为: 
  63.          * 小数乘以2,取整,小数部分继续乘以2,取整,得到小数部分0为止,将整数顺序排列 
  64.          * 。 
  65.          * 0.8125x2=1.625 取整1, 
  66.          *  
  67.          * 小数部分是0.6250.625x2=1.25 取整1, 
  68.          *  
  69.          * 小数部分是0.250.25x2=0.5 取整0, 
  70.          *  
  71.          * 小数部分是0.50.5x2=1.0 取整1, 
  72.          * 小数部分是0,结束 
  73.          *  
  74.          * 结果:11001.1101 
  75.          */  
  76.           
  77.           
  78.         /** 
  79.          * 二进制转十进制 
  80.          */  
  81.         String v1 = "10010";  
  82.         System.out.println("数值:为10010的二进制转十进制:"+Long.parseLong(v1,2));  
  83.         //法二:  
  84.         int r1 = (int)(0*Math.pow(20)+1*Math.pow(21)  
  85.                 +0*Math.pow(22)+0*Math.pow(23)+1*Math.pow(24));  
  86.         System.out.println("法二: 数值:为10010的二进制转十进制:"+r1);  
  87.           
  88.           
  89.         /** 
  90.          * 十进制转八进制  
  91.          *  
  92.          * 十进制18等于八进制8,8,2 ; 10+10+2=22 
  93.          *  
  94.          * result 22 
  95.          */  
  96.         System.out.println("数值:为18的十进制转八进制:"+Integer.toOctalString(18));  
  97.   
  98.         /** 
  99.          * 八进制转十进制 
  100.          */  
  101.         String v2 = "22";  
  102.         System.out.println("数值:为22的八进制转十进制:"+Long.parseLong(v2,8));  
  103.         //法二:  
  104.         int r2 = (int)(2*Math.pow(80)+2*Math.pow(81));  
  105.         System.out.println("法二: 数值:为22的八进制转十进制:"+r2);  
  106.           
  107.         /** 
  108.          * 十进制转十六进制  
  109.          *  
  110.          * 十进制18等于十六进制16+2 
  111.          *  
  112.          * 十六进制16为10 
  113.          *  
  114.          * result 12 
  115.          */  
  116.         System.out.println("数值:为18的十进制转十六进制 :"+Integer.toHexString(18));  
  117.         //法二:十六进制 xx*16的0次幂+xx*16的一次幂.......  
  118.           
  119.         /** 
  120.          * 二进制换算成八进制 
  121.          *  
  122.          * 2的3次幂为8,所以以每3位作为二进制换算成八进制的单位 
  123.          *  
  124.          * 如下100的二进制为4,110为6,101为5,1为1 
  125.          *  
  126.          * result 4+6+5+1 = 16 
  127.          */  
  128.          String v3 = "100 110 101 1";  
  129.           
  130.     }  
  131.   
  132. }  


2.位移运算详解

 

[java]  view plain copy print ?
  1. public class Displacement  
  2. {  
  3.   
  4.     /** 
  5.      * TODO 位移运算详解。 
  6.      *  
  7.      * @param args 
  8.      */  
  9.     public static void main(String[] args)  
  10.     {  
  11.         /** 
  12.          * ~ 位反 ~00110011 11001100    是0的就为1,是1的就为0 
  13.          *  
  14.          * & 位与 00110011&11101101 00100001 都为1的时候才为1 两个条件必须都成立 
  15.          *  
  16.          * | 位或 00110011|11100001 11110011 一个为1就取1,一个条件成立即可 
  17.          *  
  18.          * ^ 位异或 00110011^11100001 11010010 两个值都相同的时候取反,假如两个都为1,就取0 
  19.          *  
  20.          * << 左移 00110011<<2 11001100 x*2的y次幂 
  21.          *  
  22.          * >> 右移 10110011 >> 2 11101100 x/2y次幂(取整),或者先将值换算成二进制数,int型32位,不满32为的往左补0一直补满32,然后将值右移要移动位数。在换算成10进制数输出 
  23.          *  
  24.          * >>> 不带符号右移 10110011>>2 00101100 
  25.          */  
  26.           
  27.         /** 
  28.          * << 左移   
  29.          *  
  30.          * 左移: 向左移动,右边补0。 
  31.          *  
  32.          * 公式:x<<y 即 x*2的y次方 
  33.          *  
  34.          * 详解 : 
  35.          *  
  36.          * p 方法一: 可以使用公式假如2<<3位 则公式为2*2的3次幂,结果:16 
  37.          * p 方法二: 十进制的2,等价于二进制的10,左移是往右补0,所以往右补3个0 
  38.          * 变成二进制的10000,将二进制的10000转成十进制就是:2的4次幂,结果:16 
  39.          *  
  40.          */  
  41.         System.out.println(2<<3);  
  42.         System.out.println("2左移8位等价于2乘以2的8次幂"+2*Math.pow(2,8));  
  43.         //采用二进制换算  
  44.         System.out.println(Math.pow(2,11));  
  45.         //采用是公式2*2^3(2*2的3次幂)  
  46.         System.out.println(2*Math.pow(2,10));  
  47.           
  48.         /** 
  49.          * >> 右移   
  50.          *  
  51.          *  向右移动,如果符号位(int型为32位)为0,左边补0,符号位为1,左边补1  
  52.          *   
  53.          * 详解 
  54.          * 例如102 >> 2  102除以2的2次幂,实际就是102/4取整,结果为:25 
  55.          * 公式:x除以y取整 
  56.          *  
  57.          */  
  58.         System.out.println(102>>2);  
  59.           
  60.         /** 
  61.          * 15的二进制 
  62.          * 0000 0000 0000 0000 0000 0000 0000 1111 
  63.          * 往左补4个0得到: 
  64.          * 0000 0000 0000 0000 0000 0000 0000 0000 
  65.          * 结果:0 
  66.          */  
  67.         System.out.println(15>>4);  
  68.           
  69.         /** 
  70.          * 15的二进制 
  71.          * 0000 0000 0000 0000 0000 0000 0000 1111 
  72.          * 往左补2个0得到: 
  73.          * 0000 0000 0000 0000 0000 0000 0000 0011 
  74.          * 结果:3 
  75.          */  
  76.         System.out.println(15>>2);  
  77.           
  78.         /** 
  79.          * 有符号右移高位补1。 
  80.          *  
  81.          * 例如:-13 >> 3 
  82.          * 13的原码:0000 1101,带符号所以高位为1,即:1000 1101 
  83.          * -13的补码为高位不变,其他7位原码取反,再加1。 
  84.          * 1000 1101取反:1111 0010,加1后为:1111 0011 
  85.          * -13的补码:1111 0011 
  86.          *  
  87.          * 换算结果:-13右移3位,左边补1 : 1111 1110 
  88.          *  
  89.          * 即:-13 >> 3的结果为:-2 
  90.          * 看到这一步我想大家心里肯定有一个疑惑:明明是1111 1110,怎么结果变成了-2? 
  91.          * 那么答疑一下:2的二进制:0000 0010 (实际就是上面说的原码) 
  92.          * 那么补码1111 1101,加1后:1111 1110 
  93.          *  
  94.          * 最高位代表符号位 
  95.          * 所以结果为:-2 
  96.          */  
  97.         System.out.println(-13 >> 3);                 
  98.           
  99.         /** 
  100.          * 无符号右移,无符号右移高位补0。 
  101.          *  
  102.          * -3 >>> 2 
  103.          * 3的原码:0000 0000 0000 0000 0000 0000 0000 0011 
  104.          * -3的补码:1111 1111 1111 1111 1111 1111 1111 1101 
  105.          *  
  106.          * 右移两位得到:0011 1111 1111 1111 1111 1111 1111 1111 
  107.          */  
  108.         //验证 将二进制111111111111111111111111111111转成十进制的结果是否和System.out.println(-3 >>> 2)一致。  
  109.         System.out.println(Long.parseLong("111111111111111111111111111111"2));  
  110.         System.out.println(-3 >>> 2);  
  111.     }  
  112.   
  113. }  
目录
相关文章
|
3天前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
Java 并发编程——volatile 关键字解析
|
1天前
|
Java 数据库连接 Spring
反射-----浅解析(Java)
在java中,我们可以通过反射机制,知道任何一个类的成员变量(成员属性)和成员方法,也可以堆任何一个对象,调用这个对象的任何属性和方法,更进一步我们还可以修改部分信息和。
|
26天前
|
Java 编译器
Java 泛型详细解析
本文将带你详细解析 Java 泛型,了解泛型的原理、常见的使用方法以及泛型的局限性,让你对泛型有更深入的了解。
39 2
Java 泛型详细解析
|
26天前
|
缓存 监控 Java
Java线程池提交任务流程底层源码与源码解析
【11月更文挑战第30天】嘿,各位技术爱好者们,今天咱们来聊聊Java线程池提交任务的底层源码与源码解析。作为一个资深的Java开发者,我相信你一定对线程池并不陌生。线程池作为并发编程中的一大利器,其重要性不言而喻。今天,我将以对话的方式,带你一步步深入线程池的奥秘,从概述到功能点,再到背景和业务点,最后到底层原理和示例,让你对线程池有一个全新的认识。
53 12
|
23天前
|
存储 算法 Java
Java内存管理深度解析####
本文深入探讨了Java虚拟机(JVM)中的内存分配与垃圾回收机制,揭示了其高效管理内存的奥秘。文章首先概述了JVM内存模型,随后详细阐述了堆、栈、方法区等关键区域的作用及管理策略。在垃圾回收部分,重点介绍了标记-清除、复制算法、标记-整理等多种回收算法的工作原理及其适用场景,并通过实际案例分析了不同GC策略对应用性能的影响。对于开发者而言,理解这些原理有助于编写出更加高效、稳定的Java应用程序。 ####
|
23天前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
26天前
|
Java 数据库连接 开发者
Java中的异常处理机制:深入解析与最佳实践####
本文旨在为Java开发者提供一份关于异常处理机制的全面指南,从基础概念到高级技巧,涵盖try-catch结构、自定义异常、异常链分析以及最佳实践策略。不同于传统的摘要概述,本文将以一个实际项目案例为线索,逐步揭示如何高效地管理运行时错误,提升代码的健壮性和可维护性。通过对比常见误区与优化方案,读者将获得编写更加健壮Java应用程序的实用知识。 --- ####
|
29天前
|
数据采集 存储 Web App开发
Java爬虫:深入解析商品详情的利器
在数字化时代,信息处理能力成为企业竞争的关键。本文探讨如何利用Java编写高效、准确的商品详情爬虫,涵盖爬虫技术概述、Java爬虫优势、开发步骤、法律法规遵守及数据处理分析等内容,助力电商领域市场趋势把握与决策支持。
|
1月前
|
安全 Java
Java中WAIT和NOTIFY方法调用时机的深层解析
在Java多线程编程中,`wait()`和`notify()`方法的正确使用对于线程间的协调至关重要。这两个方法必须在同步块或同步方法中调用,这一规定的深层原因是什么呢?本文将深入探讨这一机制。
40 5
|
28天前
|
存储 缓存 监控
Java中的线程池深度解析####
本文深入探讨了Java并发编程中的核心组件——线程池,从其基本概念、工作原理、核心参数解析到应用场景与最佳实践,全方位剖析了线程池在提升应用性能、资源管理和任务调度方面的重要作用。通过实例演示和性能对比,揭示合理配置线程池对于构建高效Java应用的关键意义。 ####

热门文章

最新文章

推荐镜像

更多