主要内容

1.十进制二进制互转

2.二进制的位运算

3.JDK内置的进制转换

4.JAVA中的进制

十进制二进制互转

57 111001

二进制的位运算:优点:特定情况下,计算方便,被支持面广泛。

① 按位与& (两位全位1,结果才为1)
0与0=0;0与1=0;1与0=0; 1与1=1;
例:51与5
00110011
---------------
00000101
=00000001
=1
位运算的特殊用法:
*清零,取一个数中的指定位
 
②按位或 | (只要有一个位位1,结果就为1)
0|0=0; 0|1=1; 1|0=1; 1|1=1;
例:51|5 =
00110011
---------------
00000101
=00110111 = 55
或运算的特殊用法:
常用来对一个数据的某些位置1;
 
③异或运算 ∧ (两个相应位为“异”,则该结果为1,否则为0)
0∧ 0=0; 0∧ 1=1; 1∧ 0=1; 1∧ 1=0;
例:51∧ 5=
00110011
---------------
00000101
=00110110=54
特殊用法:
*使特定位翻转
*与0异或保留原值
*取反运算(对一个二进制数按位取反,即将0变为1,1变为0)
 
利用与0异或,两个变量交换值的方法:
两个变量交换值的方法有:
1.借助第三个变量
C=A; A=B; B=C;
2.利用加减法
C=A+B; B=C-B; A=C-B;
3.用位异或运算实现 (效率最高)
A=A∧B; B =A∧B; A=A∧B;
 
左移运算<< (将一个运算对象的各二进制位全部左移若干位,左边的二进制位丢弃,右边补0)
2<<1= 4
 
右移运算>>(将一个运算对象的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃)
 
无符号右移
 
负数以其正值的补码形式表示
 
原码:一个正数按照绝对值大小转换成的二进制称为原码。
 
反码
 
补码:反码加1称为补码
 

JDK内置的进制转换:

JAVA中的进制:

平时开发,进制转换和位操作用的并不多,因为JAVA处理的是高层
在跨平台中用的较多,文件读写,数据通信等。
 
基本数据类型:
int数据类: 1字节= 8bit
byte(8bit,-128~127)
short(16bit)
int(32bit)
long(64bit)
float:单精度32bit ,双精度64bit
bolean:true 1bit,false 1bit
char:unicode字符 16位
对应的包装类:Integer......
 
在JAVA里面除去基本数据类型的其它类型都是引用数据类型,String是一个类,所以String不是基本类型而是引用类型。

数据类型转换为字节:
int (8143)
8143(00000000,00000000,00011111,11001111)=byte[]={-49,31,0,0}
第一个字节(低端) 8143>>0*8&0xff=(11001111)=207或有符号-49
第二个字节(低端) 8143>>1*8&0xff=(00001111)=31
第三个字节(低端) 8143>>2*8&0xff=(00000000)=0
第四个字节(低端) 8143>>3*8&0xff=(00000000)=0
 
byte转int的时候为什么非要先&0xff计算出来才是正确答案?
首先,JAVA中的二进制采用的是补码形式,并非原码或反码,这3个概念要搞清楚;
其次,byte占8位,int占32位,将byte强制转换为int型时,如果没有做 & 0xff运算,且byte对应的值为负数的话,就会对高位3个字节进行补位,这样就有可能出现补位误差的错误。
举例来说,byte型的-1,其二进制(补码)为11111111(即0xff),转换成int型,值也应该为-1,但经过补位后,得到的二进制为11111111111111111111111111111111(即0xffffffff),这就不是-1了,对吧?
而0xff默认是int型,所以,一个byte跟0xff相与,会先将那个byte转化成int型运算,这样,结果中的高位3个字节就总会被清0,于是结果就是我们想要的了~
 
字符串转化为字节数据 :
String s; byte[] bs = s.getBytes();
字节数组转化为字符串:
String s = new Stirng(bs);
String s = new String(bs,encode);//encode指编码方式 "gb2312,utf-8"
 public class Convert {

     /**
* <<左移运算<<右移运算<<<无符号右移
*/ // int转Byte[]
public static byte[] int2Bytes(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;
} // Byte[]转int
public static int Bytes2int(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;
} // long转化为byte[]
public static byte[] long4Bytes(long id) {
byte[] arr = new byte[8];
for (int i = 0; i < arr.length; i++) {
arr[i] = (byte) ((int) (id >> i * 8) & 0xff);
}
return arr;
} /**
* byte[]转化为long型和转化int型一样,只是long是64bit,而int是32bit
*/
public static void main(String[] args) {
byte[] arr = Convert.int2Bytes(8143);
System.out.println(arr[0] + "\n" + arr[1] + "\n" + arr[2] + "\n" + arr[3]);
int rs = Convert.Bytes2int(arr);
System.out.println(rs); byte[] arr2 = Convert.long4Bytes(20);
for (byte b : arr2) {
System.out.println(b);
} // 字符串与字节数组:
String describle = "我是字符串";
byte[] barr = describle.getBytes();
String des = new String(barr);
System.out.println(des);
} }

JAVA 二进制基础的更多相关文章

  1. java编程基础二进制

    0.java编程基础 01.二进制(原码,反码,补码) 02.位运算 03.移位运算符 二进制 原码,反码,补码 1.基本概念 二进制是逢2进位的进位制,0,1是基本算符. 现在的电子计算机技术全部使 ...

  2. Java学习总结(二)----Java语言基础

    1.     Java语言基础 2.1 关键字 定义:被java语言赋予特殊含义的单词 特点:关键字中的字母都为小写 用于定义数据类型的关键字 class,interface,byte,short,i ...

  3. Android开发之Java必备基础

    Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...

  4. java语言基础02

    一.Java语言基础(常量的概述和使用)(掌握) 1:什么是常量 就是在程序的执行过程中其值不发生改变的量. 2:Java中常量的分类 (1):字面值常量 (2):自定义常量(面向对象部分讲解) 3: ...

  5. 【重走Android之路】【Java面向对象基础(一)】数据类型与运算符

    [重走Android之路][基础篇(一)][Java面向对象基础]数据类型与运算符   1.数据类型介绍 在Java中,数据类型分为两种:基本数据类型和引用类型. 基本数据类型共8种,见下表: 基本数 ...

  6. Java之--Java语言基础组成(关键字、标识符、注释、常量和变量、运算符)

    Java语言基础组成-关键字.标识符.注释.常量和变量.运算符 Java语言由8个模块构成,分别为:1.关键字:2.标识符(包名.类名.接口名.常量名.变量名等):3.注释:4.常量和变量:5.运算符 ...

  7. Java语言基础(七)

    Java语言基础(七) 今天在公司多呆了会,回来晚了 一.自动类型转换 在Java中,数据是可以转换的  例如可以将byte类型的赋给int类型的 这里希望你了解内存的变化,例如 在这里,我想你应该知 ...

  8. Java语言基础(三)

    Java语言基础(三) 一.    补码 (1).之所以有补码是因为要考虑成本 就是造计算机的成本 (2).下面让我们分析一下补码 以四位补码为例 <1> 高位是符号位,它决定其是正数还是 ...

  9. Java语言基础(二)

    Java语言基础(二) 一.变量续 (1).变量有明确的类型 (2).变量必须有声明,初始化以后才能使用 (3).变量有作用域,离开作用域后自动回收 变量作用域在块内有效 (4).在同一定义域中变量不 ...

随机推荐

  1. iOS扩展——Objective-C开发编程规范

    最近准备开始系统学习一个完整项目的开发流程和思路,在此之前,我们需要对iOS的开发变成规范进行更系统和详尽的学习,随意对编程规范进行了整理和学习.本文内容主要转载自:Objective-C-Codin ...

  2. HDU 2119 Matrix

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2119 解题思路: 处理数据,使用公式最小点覆盖数=最大匹配数,使用匈牙利算法求二分图最大匹配即可. ...

  3. 怎么从一台电脑的浏览器输入地址访问另一台电脑服务器(WAMP服务器已搭建,PHPSTORM装好了)

    服务器电脑WAMP环境搭建好了,浏览器输入LOCALHOST就能访问本地 WAMP/WWW 目录下PHP文件,怎么样才能从另一台电脑通过浏览器访问呢?求详细步骤... glwbdtb | 浏览 180 ...

  4. Python3 的元组

    元组(tuple):戴上了枷锁的列表 元组与列表非常相似但是元组内元素的类型相同,且元组内的元素不能修改 1.创建元组的方法 与列表不同创建元组大部分情况下是用小括号,例如 tuple1=(1,2,3 ...

  5. WEB应用:预览

    主题 建立WEB应用通用目录 配置classpath 将WEB应用注册到服务器中 使用制定url前缀调用WEB应用的servlet.html.jsp 为所有自己编写的servlet制定url 建立WE ...

  6. CSS background-clip 属性

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. Android + Eclipse + PhoneGap 环境配置

    用了3天的时间,终于把环境搭建完毕,郁闷了N天,终于完成了.这里我只是讲述我安装的过程,仅供大家参考. 环境搭建首先要去下载一些安装包: (下载前注意一下,电脑是32位还是64位的请注意选择安装包) ...

  8. UITableViewCell滑动删除及移动

    实现Cell的滑动删除, 需要实现UITableView的代理UITableViewDelegate中如下方法: //先要设Cell可编辑 - (BOOL)tableView:(UITableView ...

  9. Java进阶篇(四)——Java异常处理

    程序中总是存在着各种问题,为了使在程序执行过程中能正常运行,使用Java提供的异常处理机制捕获可能发生的异常,对异常进行处理并使程序能正常运行.这就是Java的异常处理. 一.可捕获的异常 Java中 ...

  10. iris数据集 决策树实现分类并画出决策树

    # coding=utf-8 import pandas as pd from sklearn.model_selection import train_test_split from sklearn ...