最近学习java基础语法的时候,对其基本数据结构中的二进制位数与十进制大小间的转换产生了疑惑,想起学习IP地址的时候也貌似产生了相同的困惑,
众所周知,计算机中是以二进制来存储数据的,计算机顾名思义设计之初也是为了计算,那么计算机是如何进行运算的呢?
在java中byte类型占8位 表示的范围是0000 0000 ~ 1111 1111 总共256个数, java中byte类型有正负,最高位表示正负,0为正,1为负。 我们先看正数: 0000 0000 ~ 0111 1111(原码)( 0 ~ 127,共128个数)我们知道在计算机系统中,数值一律用补码来表示和存储。正数的原码,反码,补码均相同,所以在计算机补码中,表示的范围还是0~127 再看负数: 1000 0000 ~ 1111 1111(原码)(-0 ~ -127 也是128个数)我们先不看-0,我们先看1000 0001 ~ 1111 1111 1000 0001 ~ 1111 1111(原码)(-1 ~ -127) 1111 1110 ~ 1000 0000(反码)(反码是在原码的值上符号位不变,其余位取反) 1111 1111 ~ 1000 0001(补码)(补码是在反码的值上最后一位加1)所以在计算机中1111 1111 ~ 1000 0001(补码)表示的范围是也是 -1 ~ -127 再回头来看-0 ( 1000 0000 )(原码) -> (1111 1111)(反码) -> ( [1]0000 0000 )(补码) 我们看出-0的补码最后也是0000 0000 , +0和-0的补码相同,由于零只有一种表达方式就行了,-0没什么意义,所以在相同位下补码可以比别的方式多表示一个数。 以至于我们用-0来表示-128,所以-128的补码为1000 0000,没有对应的原码和反码。(这里说没有对应的原码和反码是相对于8个bit的情况下,可以求出原码和反码但超出8个bit所能表达范围)
1、为什么Java中int型数据取值范围是[-2^31,2^31-1],多么神奇的问题,网上找了很多,找不到点子上,自己瞎总结一下子。
原码比较好理解,也就是该数字不进行其他操作时数字最原始的二进制表示,在Java中我们有熟悉的byte,short,int,long的整数型基本数据类型以及float,double的浮点型基本数据类型。
上次介绍了JAVA中有趣的位运算,知道了位运算是直接对一个整形的二进制位进行操作,效率上比起加减乘除高不少,因此常运用在对性能很敏感的场景。
最近在刷leetcode的题时,才发现有几道题的利用到Integer类型的最大值和最小值,尤其是在判断是否溢出的时候,有道题就非常经典直接判断最后一位,比如最大值231 – 1的最后一位是7,而最小值 -231 的最后一位是8,这样进行一个判断 8. 字符串转换整数 (atoi) 这道题对我在面试过程中被问到如何判断是否溢出有了很大启发 查下JDK1.6帮助文档是这样写的
正所谓怕什么来什么,这是知名的“墨菲定律”。Java基础涵盖各个方面,敢说Java基础扎实的人不是刚毕业的学生,就是工作N年的程序员。工作N年的程序员甚至也不敢人人都说Java基础扎实,甚至精通,往往只是“无他唯熟尔”——熟手而已。 IO这块我确实怕,它不难,只有两个方面:输入/输出。但你说它用得多不多,我相信没有你写的并发多,并发往往是处处可见,写着写着就熟了,而IO却往往只是某个模块会涉及,所以也就并不是每个程序员在开发维护自己的模块时都会用到有关IO的API,而碰到的时候常常陷入窘迫,不知道怎
在计算机中,一个二进制位是最小的存储单元,由于是二进制,所以能存储的数字只能是0和1。显然,如果我们直接去操作每个二进制位将是很麻烦的过程,所以在编程中我们直接使用的是其他的数据类型,如:byte、int、float。这些数据类型能够使我们的数据存储更加方便,我们只需要关心他们能够存储多大范围和什么样类型的数据就可以了。那么一个byte,也就是我们所说的一字节,他所占用的空间是8个二进制位。
在上一篇文章 很清晰!带你图解 Java 程序的结构,变量和类型 里,我们知道 Java 的基本类型分整型类型,浮点型类型和布尔类型三种。那针对不同的类型,Java 提供的运算能力也是各有不同,本篇文章就分析下 Java 基本类型里的各种运算是怎么回事。
数学运算是计算机的基本用途之一,Java提供了非常丰富的运算符来支持。我们根据运算的特点和性质,把运算符划分为几组:基本算数运算符、自增自减运算符、关系运算符、位运算符、逻辑运算符、赋值运算符、其他运算符。下面分别介绍。
在 Github 项目mongo-java-driver有一个类ObjectId.java,它的作用是生成唯一 id 的,它的核心实现是下面这样一段代码 1:
在 Github 项目mongo-java-driver有一个类ObjectId.java,它的作用是生成唯一 id 的,它的核心实现是下面这样一段代码 [1]:
举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理)。
为何与0xff进行与运算 在剖析该问题前请看如下代码 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
拿到int的最大值,是1111111111111111111111111111111,31个1,首位是0(代表正数,省略了)
“~”运算符在c、c++、java、c#中都有,要弄懂这个运算符的计算方法,首先必须明白二进制数在内存中的存放形式,二进制数在内存中是以补码的形式存放的。
首先我们要都知道, &表示按位与,只有两个位同时为1,才能得到1, 0x代表16进制数,0xff表示的数二进制1111 1111 占一个字节.和其进行&操作的数,最低8位,不会发生变化.
Java中运算都是以补码进行计算的,6的原码为 00000000 00000000 00000000 00000110,正数的补码 = 反码 = 原码
前面几篇文章用Java带大家一起了解了几个游戏小项目,感兴趣的小伙伴可以点击文章观摩下,手把手教你用Java打造一款简单故事书(上篇)、手把手教你用Java打造一款简单故事书(下篇)、手把手教你用Java打造一款简单考试系统(上篇)、手把手教你用Java打造一款简单考试系统(下篇)接下来的几篇文章是关于Java基础的,希望对大家的学习有帮助,欢迎大家在讨论区留言。
关于二进制 关于二进制的概念,网上已经很多,这里不多赘述,只说关键的属性说明和示例。 维基百科 记住,原码是给人看的,补码才是计算机真正使用的。 我们一般所说的二进制是有32位,首位是符号位。0是正数,1是负数。下面我们来根据例子说明二进制与十进制的转换,以及原码补码反码的概念。 二进制转10 进制(32位太长,我们省略我8位方便演示) 规则:从后往前依次下标为0,1,2..n,如果位是1 则记2的下标次方,有多少个是1的都相加。最后根据符号位标示正负即可。 示例1:0000 00
1.如何将数字输出为每三位逗号分隔的格式,例如“1,234,467”? 1 package com.Gxjun.problem; 2 3 import java.text.DecimalFormat; 4 import java.util.Scanner; 5 6 7 /* 8 * 如何将数字输出为每三位逗号分隔的格式, 9 * 例如“1,234,467”? 10 * */ 11 12 public class FloatDirve { 13 14 p
最近一个月看了学习了很多关于SQL性能优化、Spring核心源码分析、MyBatis核心源码分析、JUC并发包下面的知识点,感觉收获很多。这几天,会陆陆续续产出一些博客,进行知识总结。一边健忘一边学习新知识点,痛苦并快乐着。
蜗牛也做过面试官,本篇文章就从面试官的角度上,精选出 Java 基础相关的题目,我会给出参考答案,也会指明考察点,欢迎大家一起互动交流。
上一篇:消息队列 ActiveMQ 、RocketMQ 、RabbitMQ 和 Kafka 如何选择?
可以移位运算的类型有:iuint,int,lang等类型.我们本次使用int类型 一个int类型占4个字节,共32位,带符号位,所以最高位位符号位(使用0,1表示符号位)
下面这行代码的输出是什么? public static void main(String[] args) { System.out.println(0xffffffff); } 下面两行代码的输出相同吗? public static void main(String[] args) { byte b=-1; System.out.println((int)(char)b); System.out.println((int)(char)(b & 0xff)); } 请尝试在Eclipse中运行
从JDK1.0开始,Integer中就定义了MIN_VALUE和MAX-VALUE两个常量:
和之前的一模一样,不可变类,继承了抽象类 Number,实现了 Comparable 接口。
要弄懂这个运算符的计算方法,首先必须明白二进制数在内存中的存放形式,二进制数在内存中是以补码的形式存放的。
原码 反码 补码的转换 还是比较 简单基础的问题。之前学习java的时候就学过,后来忘记了,忘记了!!!,后来学了位移运算符,左移 右移 无符号右移 之后就由有点儿懵了。
读本文前请首先搞懂 “反码”,“取反”,“按位取反(~)”,这3个概念是不一样的。
注意:本文,并不是给中高级的人员查看。如果您觉得自己的水平非初级,请直接关闭该文,谢谢~。
非十进制(八进制,十六进制)写在文件中它本身就是补码,计算机是不用进行内存转换,它直接存入内存。(因为十六进制本身是补码,所以计算机里面我们看到的都是十六进制去存储)
折腾的心,颤抖的手,只因在 main 函数中执行了一次 int 强转 byte 的操作,输出结果太出所料,于是入坑,钻研良久,遂有此篇。
首先了解几个概念: 1、字(Byte)节是长度单位。位(bit)也是长度单位。 2、基本数据类型 所占用空间大小:byte b; 1字节、short s; 2字节、int i; 4字节、long l; 8字节、char c; 2字节(C语言中是1字节)、float f; 4字节、double d; 8字节、boolean bool; false/true 1字节 3、因为计算机通信和存储的时候都是以010101这样的二进制数据为基础的,这儿的一个0和1占的地方就叫bit(位),即一个二进制位。 1Byte=
② char c1 = 'a'; char c2 = '中'; char c3 = '9';
还记得我们刚开始学习Java的时候记住优先级和逻辑运算符就可以开始工作了,昨天在看到源码的时候发现一个操作符 |=,没有印象,然后去搜了下,发现提到的文章也很少,今天去看了一下官文,然后去google找了一圈,总结下来,供自己和大家参考。
1.java中常量分类: A:字面值常量 字符串常量 用双引号括起来的内容 举例:”lixiaochi”,”liyan” 整数常量 所有整数 举例:12,23 小数常量 所有小数 举例:12.34,56.78 字符常量 用单引号括起来的内容 举例:’a’,’A’,’0’ 布尔常量 较为特有,只有true和false 举例:true,false 空常量 null(数组部分讲解) /*程序样例: class ConstantDemo { public static void main(String[] args) { System.out.println(“hello”); System.out.println(12); System.out.println(100.12); System.out.println(‘a’); System.out.println(true); System.out.println(false); } } B:自定义常量(后面会讲,通过一些关键字把变量名定义成常量类型)。比如,final或abstract关键字修饰的变量。 */
首先了解几个概念: 1、字(Byte)节是长度单位。位(bit)也是长度单位。
首先要了解的概念是 Java 中用补码表示二进制数,补码的最高位代表符号位,最高位是 1 则表示为正数,最高位是 0 则表示为负数。 正数的补码是本身,负数的补码其绝对值的二进制位按位取反后 +1。 例如: +60:二进制表示形式为 0011 1100,补码为本身,也就还是 0011 1100 -60:已知 +60 的二进制表现形式为 0011 1100,按位取反后是 1100 0011,在加 1,就是1100 0100。即表示 -60 的二进制表现形式 1100 0100。 回到正题,那么 byte 表示
计算机中数字都是用二进制来表示的,有三种编码方式:原码、反码、补码,而计算中用到最多的就是补码,原因是什么呢?让我们来看一下这三种方式的具体表示吧
变量是内存中的一个存储区域。而数据类型的定义决定了这块存储区域的大小。【变量与数据类型的关系】
可以将boolean的true和false看作是1和0,这样&和|的意义就是按位与和按位或。
定义 进制也就是进位计数制,是人为定义的带进位的计数方法。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。 常用进制类型 二进制 计算机底层都是使用二进制进行存储以及运算 0b****;(以0b或者0B开始,*表示0或1)比如:010101 原码、反码、补码 原码 原码:将一个整数转换成二进制表示 以 int 类型为例,int类型占4个字节、共32位。 例如: 2 的原码为:00000000 00000000 00000000 00000010
本文主要包括Java入门的一些知识,包括JDK环境安装,常用语法以及面向对象编程等。
请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
领取专属 10元无门槛券
手把手带您无忧上云