【Java】八进制那些事
直接数值赋值
众所周知,数值前不加0,所以八进制数的表示要求开头加0,注意不是o或者O。
比如0123,直接赋值,对应的其实是十进制数83。
jshell> int a = 0123;
a ==> 83
来自字符串的转型
但字符串的强制转型则截然不同。
我们的数值串可能以0开头,比如下面的串"0123":
jshell> String b = "0123";
b ==> "0123"
直接转型,发现只是把0消去了而已,还是妥妥的十进制。
理由是:Integer.parseInt()默认十进制。
jshell> int c = Integer.parseInt(b);
c ==> 123
那怎么转八进制呢?显然是加上radix参数的啦,参数值就是8。
jshell> int d = Integer.parseInt(b, 8);
d ==> 83
你以为决定能转成八进制是因为b是"0123"?其实不是,任意数就可以,没必要有先导0的:
jshell> b = "123";
b ==> "123"jshell> int d = Integer.parseInt(b, 8);
d ==> 83
printf()输出八进制
这个部分该使用%0还是%o呢?
先看看%0吧!
jshell> System.out.printf("%0", a);
| 异常错误 java.util.UnknownFormatConversionException:Conversion = '0'
| at Formatter.checkText (Formatter.java:2732)
| at Formatter.parse (Formatter.java:2718)
| at Formatter.format (Formatter.java:2655)
| at PrintStream.format (PrintStream.java:1053)
| at PrintStream.printf (PrintStream.java:949)
| at (#4:1)
明显在扯皮……%0什么鬼啊。。。
所以要用%o,打印出的结果就是八进制的啦!(%d是十进制整数)
jshell> System.out.printf("%o", a);
123$5 ==> java.io.PrintStream@65e2dbf3jshell> System.out.printf("%o", c);
173$6 ==> java.io.PrintStream@65e2dbf3jshell> System.out.printf("%d", a);
83$7 ==> java.io.PrintStream@65e2dbf3
大O行吗?
jshell> System.out.printf("%O", c);
| 异常错误 java.util.UnknownFormatConversionException:Conversion = 'O'
| at Formatter$FormatSpecifier.conversion (Formatter.java:2839)
| at Formatter$FormatSpecifier.<init> (Formatter.java:2865)
| at Formatter.parse (Formatter.java:2713)
| at Formatter.format (Formatter.java:2655)
| at PrintStream.format (PrintStream.java:1053)
| at PrintStream.printf (PrintStream.java:949)
| at (#7:1)
显然不行啊!
八进制回转String
注意前面已经定义了a的值是0123,即83。
那么同样可以使用 Integer.toString() 中的radix来破解,radix置为8即可。
jshell> String e = Integer.toString(a, 8);
e ==> "123"
结果不带先导0。
总结
有关八进制的使用,大概可以这么做一下归纳:
- 八进制用的不多,不如二进制、十进制、十六进制广泛。
- 八进制直接赋值要加先导0,但显示出来的还是十进制的值,底层还是二进制在运算,八进制没实际意义。注意这里不是o或者O,是0。
- 八进制使用printf()打印的时候用的是"%o",不是O或者0。
- 将String转换成八进制数的时候,使用Integer.parseInt(),指明radix即可,结果还是十进制(显示)/二进制(底层)表示的。注意String不必加先导0。
- 八进制数转成String的时候,使用逆向的Integer.toString(),指明radix即可,结果就是不带先导0的八进制字符串表示。
【Java】八进制那些事相关推荐
- java 静态代码块_关于Java你不知道的那些事之代码块
前言 普通代码块:在方法或语句中出现的{},就被称为代码块 静态代码块:静态代码块有且仅加载一次,也就是在这个类被加载至内存的时候 普通代码块和一般语句执行顺序由他们在代码中出现的次序决定,先出现先执 ...
- Java 混淆那些事(五):ProGuard 其他的选项
本文已授权微信公众号「玉刚说」独家发布. 这篇是我们「Java 混淆那些事」第五讲,其实通过前四篇大家已经能够写出正常的混淆规则了,这一篇是简单的介绍一下不怎么常用的一些命令,个人觉得重要的会单独拿出 ...
- java八进制转换器,Java将八进制转换为十进制
本文概述 我们可以使用Integer.parseInt()方法或自定义逻辑在Java中将八进制转换为十进制. Java八进制到十进制的转换:Integer.parseInt() Integer.par ...
- 关于R.java和ButterKinfe独特的R2.java的那些事
关于R.java和ButterKinfe独特的R2.java的那些事 一.Android的R.java文件 Android项目中,当Android应用程序被编译,会自动生成一个R类,包含了所有re ...
- java compare 返回值_关于Java你不知道的那些事之Java8新特性[Lambda表达式和函数式接口]...
前言 为什么要用Lambda表达式? Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,将代码像数据一样传递,这样可以写出更简洁.更灵活的代码,作为一个更紧凑的代码风 ...
- java八进制数转十进制数_Java程序八进制数与十进制相互转换
Java程序八进制数与十进制相互转换 在此程序中,您将学习如何使用Java中的函数将八进制数转换为十进制数,反之亦然. 示例1:将十进制转换为八进制的程序 public class DecimalOc ...
- java八进制写法_Java中8进制和16进制的表示方法
由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题. 但,二进制数太长了.比如int 类型占用4个字节,32位.比如100,用int类型的二进制数表达将是: ...
- JAVA那点破事!并发、IO模型、集合、线程池、死锁、非阻塞、AQS....
关于Java面试,面试官一般喜欢问哪些问题? 本文对一些高频问题做了汇总,为了便于大家查找问题,了解全貌,整理个目录,我们可以快速全局了解关于 JAVA 接下来,我们逐条来看看每个问题及答案 JDK. ...
- 关于Java你不知道的那些事之Java注解和反射
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 作者:轻 ...
最新文章
- Error creating bean with name 'messageSource' defi
- 甩锅!偷懒!PUA!转嫁压力!铲除异己!压榨下属!这就是职场leader真面目!...
- JavaScript DOM编程艺术 - 读书笔记1-3章
- HTML实现跳转到页面指定位置
- 中的挂起是什么意思_书房装饰挂什么画好 书法字画给你想要的诗意生活
- VMware Workstation 8正式版下载+密钥序列号
- python异步_Python中的异步编程
- 别让数据坑了你!用置信学习找出错误标注(附开源实现)
- OPPO K9s官宣:5000mAh超大电量 充电功率阉割明显
- 让vue文件直接在浏览器中运行
- mac系统csv转ansi_迅捷文字转语音 for mac
- 区块链 试题_区块链期末复习四
- 微信群发机器人源代码
- linux怎么查服务器的ip地址查询,Linux操作系统查看当前服务器网卡的IP地址
- HDFS java接口——实现目录增删文件读写
- 【OBS】OBS Studio 的安装、参数设置和录屏、摄像头使用教程
- 关于百度网盘下载过慢的解决方法
- 知识图谱构建:py2neo的实体关系以及节点显示图片
- How to use segment advisor
- python中字符串转成数字的几种方法
热门文章
- FPGA中计数器设计探索
- vscode格式化关于符合eslint检测语法配置
- HTML5笔记1——HTML5的发展史及标签的改变
- 板邓:wordpress中add_action()和do_action()关系
- php 大流量网站访问
- zoj1738 Lagrange's Four-Square Theorem(DP)
- 利用XMLSerializer将对象串行化到XML
- Vue入门 ---- vuex
- Golang——死锁、互斥锁、读写锁的实现
- html5 客户端数据缓存机制,深入理解HTML5离线缓存机制