java进制操作

1.二进制

二进制只有0和1,逢二进一

二进制多用在计算机中,来自计算机硬件的开关闭合

2.位运算

分别讲解:

2.1.按位与 &

两位全为1,结果才为1

0&0=0;1&0=0;1&1=1;

例如:51&5=1

0011 0011 & 0000 0101 = 0000 0001

位运算的特殊用法:

1.清零。如果想将一个单元清零,可使其全部二进制为0,只要与一个各位都为0的数值相与,结果就为零

2.取一个数中的指定位。方法是:找一个数,对应X要取的位,该数的对应位为1,其余位为0,此数与X进行“与运算”可以得到X中的指定位

例如:

设X=1010110,取X的低4位

X&0000 1111= 0000 1100;

2.2.按位或 |

只要有一个数为1,结果就为1

0|0=0; 0|1=1; 1|1=1;

例如:

51 | 5 = 55

0011 0011 | 0000 0101 = 0011 0111

或运算的特殊用法:

常用来对一个数据的某些位置1

使用发放是:找到一个数,对应X要置1的位,该数的对应位为1,其余位为0.此数与X相与可使X中的某些位置1

例如:

将X=1010 0000的低4位置为1

X | 0000 1111 = 1010 1111

2.3.亦或运算 ^

两个相应位为“异”(值不同),则该位结果为1,否则为0

0^0=0; 0^1=1; 1^1=0;

例如:

51^5=54

0011 0011 ^ 0000 0101 = 0011 0110

亦或运算的特殊用途

1.使特定位翻转,找一个数,对应X要翻转的各位,该数的对应位为1,其余位为0,此数与X对应位亦或即可

2.与0相异,保留原值

2.4.取反运算

对一个二进制数按位取反,即将0变1,1变0

~1=0; ~0=1;

2.5.左移运算 <<

将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)

2<<1=4

若左移使舍弃的高位不包含1,则每左移一位,就相当于该数乘以2

2.6.右移运算 >>

将一个数的各二进制位全部右移若干位,正数左补0,负数左补1.右边丢弃。操作数每右移一位,相当于该数除以2

左补0还是1得看被移数是正还是负

2.7.右移运算 >>

各个位向右移,指定的位数。右移后左边空出的位数用0来填充,移出右边的位被丢弃

3.JDK内置的进制转换

/**
* 测试JDK中的进制转换
*/
public class TestRadix {
public static void main(String[] args) {
/**
* 十进制转为其他进制
* 转换的结果是无符号的
*/
//十进制转二进制
System.out.println(Integer.toBinaryString(112));//1110000
//十进制转八进制
System.out.println(Integer.toHexString(112));//70
//十进制转十六进制
System.out.println(Integer.toOctalString(112));//160 /**
* 其他进制转化为十进制
* parseInt接收的是有符号正数作为值传进去,结果也是有符号的
*/
//
System.out.println(Integer.parseInt("1110000", 2));
System.out.println(Integer.parseInt("70"));
System.out.println(Integer.parseInt("160", 16));
} }

4.java中的进制

在平时开发中“进制转换”和“位操作”用的不多,因为java处理的是高层

但是在跨平台中用的较多,如:文件读写和数据通信

4.1.java中的数据类型

基本数据类型只有一下4中:

1.int类型:byte(8bit,1字节),short(16,2字节),int(32bit,3字节),long(64bit,8字节)

2.float类型:单精度(32bit),双精度(64bit)

3.boolean类型:true,false

4.char类型:unicode字符,16为

以上对应的类型:Integer, Float, Bollean, Character, Double, Short, Byte, Long

4.2.数据类型和字符类型转化为字节

示例代码:


/**
* 数据类型转化为字节
*/
public class Convert {
/**
* int转化为byte[]
* @param id 接收一个int
* @return 返回数组
*/
public static byte[] int2Byets(int id){
byte[] arr = new byte[4];
// arr[0] = (byte)((int)(id>>0*8)&0xff);
// arr[1] = (byte)((int)(id>>1*8)&0xff);
// arr[2] = (byte)((int)(id>>2*8)&0xff);
// arr[3] = (byte)((int)(id>>3*8)&0xff);
// return arr;
for (int i = 0; i < arr.length; i++) {
arr[i] = (byte)((int)(id>>i*8)&0xff);
}
return arr;
} /**
* byte转化为int
* @param arr
* @return
*/
public static int byte2Int(byte[] arr){
// int rs0 = (int)((arr[0]&0xff)<<0*8);
// int rs1 = (int)((arr[1]&0xff)<<1*8);
// int rs2 = (int)((arr[2]&0xff)<<2*8);
// int rs3 = (int)((arr[3]&0xff)<<3*8);
// return rs0+rs1+rs2+rs3;
int result = 0;
for (int i = 0; i < arr.length; i++) {
result += (int)((arr[i]&0xff)<<i*8);
}
return result;
} /**
* long转化为byte[]
* @param id 接收一个int
* @return 返回数组
*/
public static byte[] long2Byets(int id){
byte[] arr = new byte[8];
for (int i = 0; i < arr.length; i++) {
arr[i] = (byte)((long)(id>>i*8)&0xff);
}
return arr;
} /**
* byte转化为long
* @param arr
* @return
*/
public static int byte2long(byte[] arr){
// int rs0 = (int)((arr[0]&0xff)<<0*8);
// int rs1 = (int)((arr[1]&0xff)<<1*8);
// int rs2 = (int)((arr[2]&0xff)<<2*8);
// int rs3 = (int)((arr[3]&0xff)<<3*8);
// return rs0+rs1+rs2+rs3;
int result = 0;
for (int i = 0; i < arr.length; i++) {
result += (long)((arr[i]&0xff)<<i*8);
}
return result;
} public static void main(String[] args) {
//测试int转化为byte
byte[] arr = Convert.int2Byets(8143);
System.out.println(arr[0]+","+arr[1]+","+arr[2]+","+arr[3]);//-49,31,0,0 //测试byte转化为int
System.out.println(Convert.byte2Int(arr));//8143 //测试long转化为byte
//注意:long型和int就是在字节不同
byte[] arr1 = Convert.long2Byets(4719857);
System.out.println(arr1[0]+","+arr1[1]+","+arr1[2]+","+arr1[3]);//-15,4,72,0 //字符串与字节数组
String dec = "我每天都写代码,我就会很厉害……";
//字符转化成字节
byte[] barr = dec.getBytes();
//字节转化为字符
String describle = new String(barr);
System.out.println(describle);
}
}

第26章 java进制操作的更多相关文章

  1. C语言学习笔记:15_c语言中的进制操作.c

    /* * 15_c语言中的进制操作.c * * Created on: 2015年7月5日 * Author: zhong */ #include <stdio.h> #include & ...

  2. Java进制转换, 数据类型, 运算符

    1:进制转换 转换规则: 先把数据的每一位上的系数乘以对应基数的次幂(低位从零开始),然后相加即可 十进制到其他进制 规则:除基取余,直到商为0,最后将余数反转 十进制到二进制: 除2取余,直到商为0 ...

  3. java 进制.

    /* 整数的'3'种表现形式: 1,十进制. 2,八进制. 3,十六进制. */ public class IntegerDemo { public static void main(String[] ...

  4. java进制转换器 图形用户界面 十进制及其相反数分别转化为二,四,八,十六进制

    package com.rgy.Test; import java.awt.Color; import java.awt.FlowLayout; import java.awt.GridLayout; ...

  5. 【Java学习笔记之四】java进制转化

    十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinar ...

  6. Java 进制间的转换

    package com.touch.onlinedu; public class Test { public static void main(String[] args) { // 1 : 0001 ...

  7. Java进制间的转换

    最近学习了Java间的进制转换,记录下自己的学习心得,希望可以帮到前来查看的朋友们,如果有不懂的地方可以在下方评论留言,我们一起学习进步,只有自己足够强大才能弥补不足,多学习, 任意进制到十进制的转换 ...

  8. Java 进制及转换

    Java 整型的表现形式 Java 数据类型中有四种整型,分别是 byte.short.int.long,而整型定义下的数据还会按进制来区分: 十进制整数:都是以 0-9 这九个数字组成,不能以 0 ...

  9. Java进制转换

    其他转10进制 System.out.println(Integer.parseInt("10", 2));// bin System.out.println(Integer.pa ...

随机推荐

  1. 家族/亲戚(relation)

    题目描述 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚.如果x,y是 ...

  2. EF Core1.0 CodeFirst为Modell设置默认值!

    当我们使用CodeFirst时,有时候需要设置默认值! 如下 ; public string AdminName {get; set;} = "admin"; public boo ...

  3. svn提交时出现很多乱文件怎么解决

    在我们开发项目中的时候经常使用到svn,有时候我们commit的时候回出现很多无用的文件,这些文件就是未版本化的文件,怎么解决这些乱文件的问题呢? svn commit提交的时候有个"sho ...

  4. 《数据结构与算法Python语言描述》习题第二章第三题(python版)

    ADT Rational: #定义有理数的抽象数据类型 Rational(self, int num, int den) #构造有理数num/den +(self, Rational r2) #求出本 ...

  5. php实现设计模式之 访问者模式

    <?php /** * 访问者模式 * 封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作. * 行为类模式 */ /** 抽象访问者:抽象类或 ...

  6. Castle Windsor常用介绍以及其在ABP项目的应用介绍

    最近在研究ABP项目,有关ABP的介绍请看阳光铭睿 博客,ABP的DI和AOP框架用的是Castle Windsor下面就对Castle Windsor项目常用方法介绍和关于ABP的使用总结 1.下载 ...

  7. (原)3.1 Zookeeper应用 - Master选举

    本文为原创文章,转载请注明出处,谢谢 Master 选举 1.原理 服务器争抢创建标志为Master的临时节点 服务器监听标志为Master的临时节点,当监测到节点删除事件后展开新的一轮争抢 某个服务 ...

  8. 七牛--关于图片上传方向不统一的问题--主要关于图片EXIF信息中旋转参数Orientation的理解

    [图片引用方向纠正]直接在图片后面添加 ?imageMogr/auto-orient eg:http://data.upfitapp.com/data/2016/10/18/1629114767606 ...

  9. 实用CSS3的transform实现多种动画效果

    查看效果:http://keleyi.com/a/bjad/b6x9q8gs.htm 以下是代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. ...

  10. JavaScript时间处理之几个月前或几个月后的指定日期

    在平常项目开发过程中,经常会遇到需要在JavaScript中处理时间的情况,无非两种(1,逻辑处理  2,格式转换处理).当然要说相关技术博,园子里闭着眼睛都能抓一把,但是我要做的是:既然有幸被我碰到 ...