1. Java基本数据类型

  1.1 数据类型示意图

类型 字节数 范围
byte 1 -128~127
short 2 -32768~32767
int 4

-231~231-1

long 8 -263~263-1
float 4  
double 8  
bolean 1  
char 2  

  (ps:  byte、char、short在运算时会自动提升到 int 类型)

  1.2 隐式转换&显式转换

  隐式类型转换:从存储范围小的类型到存储范围大的类型转换。

  显示类型转换:强制类型转换,从存储范围大的类型到存储范围小的类型转换。


2. 位运算

  2.1 位运算符

运算符 说明
&
|
^ 异或
~ 取反
<< 左移
>> 右移
>>> 无符号右移

  【&&与&的区别】

  &&存在短路,&通过位运算完成,无短路操作

  2.2 原码、反码、补码

  【原码】

  符号位加上数字的二进制表示,第一位为符号位(0为正数,1为负数)

  byte 类型的 +7 和 -7 的原码如下

  +7:00000111

  -7: 10000111

  【反码】

  正数的反码与原码相同,负数的反码符号位不变,其余位数取反。

  byte 类型的 +7 和 -7 的反码如下

  +7:00000111

  -7: 11111000

  【补码】

  正数的原码、反码、补码相同,负数的反码为原码取反加1

  byte 类型的 +7 和 -7 的补码如下

  +7:00000111

  -7: 11111001

  2.3 把 long 数据转换成字节数组相互转换

 /**
* 1. 把long数据转换成字节数组
* 2. 把字节数组数据转换成long
*/
public class TransDataType {
//把long数据转换成字节数组
public static byte[] long2Bytes(long lon) {
byte[] bytes = new byte[8];
for (int i = 0; i < 8; i++) {
bytes[i] = (byte) (lon >> (56 - 8 * i));
}
return bytes;
} //把字节数组数据转换成long
public static long bytes2Long(byte[] bytes) {
long val = 0;
for (int i = 0; i < 8; i++) {
long lon = ((long) bytes[i] & 0xff) << (56 - 8 * i);
val += lon;
}
return val;
} public static void main(String[] args) {
byte[] bytes = long2Bytes(-1275555);
for (int i = 0; i < bytes.length; i++) {
System.out.println(bytes[i]);
} System.out.println("=============================================="); long l = bytes2Long(bytes);
System.out.println(l);
}
}

  2.4 将 byte 变换成无符号的整数(0 ~ 255 , 正数不变)

 /**
* 将byte变换成无符号的整数(0 ~ 255 , 正数不变)
*/
public class TransByte2Int {
public static int bytes2Int(byte by){
int a = by&0xff;
return a;
} public static void main(String[] args) {
int i = bytes2Int((byte) -128);
System.out.println(i);
}
}

  2.5 定义函数,取出整数内存中的存储形态对应的16进制字符串与2进制字符串

 /**
* 定义函数,取出整数内存中的存储形态对应的16进制字符串
* 定义函数,取出整数内存中的存储形态对应的2进制字符串
*/
public class TransInt2String {
//定义函数,取出整数内存中的存储形态对应的16进制字符串
public static String int2HexString(int in) { StringBuilder builder = new StringBuilder();
char[] chars = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
for (int i = 0; i < 8; i++) {
char c = chars[in >> (i * 4) & 0x0f];
builder.insert(0, c);
}
return builder.toString();
} //定义函数,取出整数内存中的存储形态对应的2进制字符串
public static String int2BinString(int in) { StringBuilder builder = new StringBuilder();
char[] chars = {'0', '1'};
byte[] bytes = new byte[8];
for (int i = 0; i < 32; i++) {
builder.append(chars[in >> (31 - i) & 0x01]);
}
return builder.toString();
} public static void main(String[] args) { System.out.println("==============================================");
String s1 = int2HexString(100);
System.out.println(s1); System.out.println("==============================================");
String s2 = int2BinString(100);
System.out.println(s2);
}
}

  2.6 有5亿整数(非负),去重计算不同整数的个数,300M内存

 package com.share.java.test;

 import org.junit.Test;

 /**
* 有5亿整数(非负),去重计算不同整数的个数,300M内存
* int的最大值为Integer.MAX_VALUE (2147483647/8/1024/1024=255)
* 一个byte有8位,定义长度为 Integer.MAX_VALUE/8 +1 的byte数组
* 每一位都表示一个数
* 遍历int数组
* 通过 整数/8 确定行,用过 整数%8 确定列
* 通过得到的行数和列数确定的位置,判断该位置是否存在1
* 若不存在,将该位置设置为1,count加1
*/
public class TestCalc { @Test
public void testCountUnique() {
int[] arr = {0, 1, 2, 3, 4, 1, 2, Integer.MAX_VALUE};
System.out.println(countUnique(arr));
} /**
* 去重统计整数个数
*/
public static int countUnique(int[] arr) {
//计算行数
int rows = Integer.MAX_VALUE / 8 + 1; //初始化字节数组
byte[] bytes = new byte[rows]; //计数器
int count = 0;
//
for (int i : arr) {
//定位行数
int row = i / 8;
//定位列数
int col = i % 8;
//
int r = (byte) (bytes[row] & (1 << col));
if (r == 0) {
count++;
bytes[row] = (byte) (bytes[row] | (1 << col));
}
}
return count;
}
}

Java 基本数据类型 && 位运算的更多相关文章

  1. Java二进制和位运算,这一万字准能喂饱你

    基础不牢,地动山摇.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众号[BAT的乌托 ...

  2. Java中的位运算

    昨天去面试的时候做到了一道Java的位运算题目,发现有个运算符不懂:">>>",今天特地查了一下,并小结一下常见的位运算符号: ~  按位非(NOT)(一元运算) ...

  3. Java学习之位运算和逻辑运算符

    今天看了一下HashMap类的源码,在HashMap的源码中定义了初始空间的大小 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; 当 ...

  4. java基础之位运算

    java中常见的位运算符:&(逻辑与) |(逻辑或) ~(取反) ^(逻辑异或) >>(右移) <<(左移) >>>(无符号右移) &(逻辑与 ...

  5. java ----> 基础之位运算

    package test.ant; import java.util.Arrays; import java.io.UnsupportedEncodingException; public class ...

  6. Java中的位运算及简单的算法应用介绍

    众所周知,计算机底层是二进制.而java作为一门计算机编程语言,也对二进制的位运算提供了完整的支持. 在java中,int是32位的,也就是说可以用来实现32位的位运算.方便起见,我们一般用16进制对 ...

  7. java中通过位运算实现多个状态的判断

    通过 <<  |  & ~ 位运算,实现同时拥有多个状态 通过 << 定义数据的状态 public interface LogConstants { /** * 消耗标 ...

  8. Java - day002 - 运算符,位运算,流程控制

    1 运算符 +-*/               (+)   既是数学运算 ,也是 字符串链接 %                  求余  /  求模  (进口大麻袋) ==             ...

  9. Java负数的位运算

    /** * 求负数的位运算 *///1. -10 >> 2 = ?//2. -10的原码: 1000 0000 0000 0000 0000 0000 0000 1010 最高位代表符号位 ...

随机推荐

  1. [Python学习笔记-003] 使用PyOTP获取基于OTOP算法的动态口令

    建立安全的VPN连接,不仅需要输入用户名和密码,还需要输入动态口令(token).作为一个懒人,我更喜欢什么手工输入都不需要,既不需要输入password,也不需要输入token.也就是说,只需一个命 ...

  2. 【详解】JNI(Java Native Interface)(一)

    前言: 一提到JNI,多数编程者会下意识地感受到一种无法言喻的恐惧.它给人的第一感觉就是"难",因为它不是单纯地在JVM环境内操作Java代码,而是跳出虚拟机与其他编程语言进行交互 ...

  3. Java 容器源码分析之1.7HashMap

    以下内容基于jdk1.7.0_79源码: 什么是HashMap 基于哈希表的一个Map接口实现,存储的对象是一个键值对对象(Entry<K,V>): HashMap补充说明 基于数组和链表 ...

  4. Hibernate常出现的报错

    刚开始学习hibernate的时候,第一次就遇到了空指针异常,结果是我的配置文件处理错误(主要是数据库表的字段与就java实体类的属性名单词写错了):一般是报空指针异常的话,多半是配置文件的问题. 但 ...

  5. 编写无Java脚本的JSP页面

    在上一章中总结了Web开发中应用MVC架构模式,将Servlet 用做控制器,JSP作为视图,JavaBean作为模型,实现业务流程控制,页面逻辑和业务逻辑的分离.然而,使用前面的技术实现MVC,并不 ...

  6. 简单实现Spring框架--注解版

    自己写的Spring框架——简单实现IoC容器功能 前几天在网上看了篇帖子,是用xml的方式实现spring的ioc容器,觉得挺有意思的,这边自己试着用注解的形式造了一套轮子. 工程结构 codein ...

  7. Windows7下IIS+php配置教程 http://www.jb51.net/article/113812.htm

    这篇文章主要为大家详细介绍了Windows7下IIS+php配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 WINDOWS 7 IIS+php配置教程,具体内容如下 打开 开始 -> ...

  8. Docker创建运行多个mysql容器

    1.使用mysql/mysql-server:latest镜像快速启动一个Mysql实例 docker run --name ilink_user_01 -e MYSQL_ROOT_PASSWORD= ...

  9. Nginx初探

    nginx是一款轻量级的web服务器.反向代理服务器和电子邮件服务器,占有内存少,并发能力强. 本文将简单介绍如何安装.启动nginx,部署web项目,应用反向代理. 一.安装 可参考https:// ...

  10. 【JVM】1、java虚拟机参数-X 与 -XX的区别

    Options that begin with -X are non-standard (not guaranteed to be supported on all VM implementation ...