占用字节数 & 取值范围

Java一共有8种基本数据类型(原始数据类型):

类型            存储要求               范围(包含)                默认值              包装类
int 4字节(32位) -2^31~ 2^31-1 0 Integer
short 2字节(16位) -215~215-1 0 Short
long 8字节(64位) -2^63~2^63-1 0 Long
byte 1字节(8位) -2^7~2^7-1 0 Byte
float 4字节(32位) -3.4e+38 ~ 3.4e+38 0.0f Float
double 8字节(64位) -1.7e+308 ~ 1.7e+308 0 Double
char 2字节(16位) u0000~uFFFF(‘’~‘?’) ‘0’ Character
boolean 1/8字节(1位) true, false FALSE Boolean

对于float与double类型:

内存结构:

  1. float类型: 内存中共占4个字节,32bit位,其中bit位从高到低,依次是1位符号位、8位指数位、23位尾数位;
  2. double类型:内存中共占8字节,64bit位,其中bit位从高到低,依次是1位符号位、11位指数位、52位尾数位;

精度:

精度由尾数的位数决定,在内存中按照科学计数法的方式存储的。

关于比较是否相等:

  1. 两个浮点数之间不能通过来比较是否相等,因为浮点数的精度是有限制的,超过精度限制的浮点数,计算机会将精度之外的小数部分截断,如果直接比较的话,会出现两个不一样的值结果大小判断却相等的情况。
  2. 一般情况下,不要通过==或者!=来比较,可以通过判断其差值的绝对值是否大于0来判断。
  3. 实际应用中,一般两个浮点数之间的差值的绝对值小于等于某一个可接受的误差(即:精度,比如0.00000001),就认为是相同的。

实际应用原则:

  1. 程序中尽量避免浮点型数据的比较;
  2. float、double类型运算一般都不准确,只适合科学计算或者工程计算,不适用与商业计算。比如1.0f-0.9f=0.100000024

为了解决JAVA中浮点数精度不够的问题,可以使用BigDecimal来替代,适用于对精度要求较高的系统中。


源码 & 反码 && 补码##

源码

源码就是数字对应的二进制表示。

负数的源码 = 正数的源码取反再加1

反码

正数的反码就是源码自身。

负数的反码就是:保持源码符号位不变,其余各个位取反。

补码

正数的补码就是源码自身。

负数的补码就是: 反码基础上加1

如何根据补码计算源码:

  1. 最高位如果是0,即为正数,其补码即为源码;
  2. 最高位如果是1,即为负数,对此补码再次计算补码,结果即为源码(即:补码的补码即为源码)。

为什么要有源码、反码、补码

反码、补码存在主要是为了是计算机运算更加方便。

具体可以参见http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html


运算符

根据参与运算的参数个数,可以分为下面几种:

  1. 一元运算符:就是只需要一个参数的运算,比如++、--、~、!等;
  2. 二元运算符:就是需要2个参数的运算,比如+、-、*、>、<等;
  3. 三元运算符:就是需要3个参数的运算,比如?:运算符(isTrue ? A : B)。

位运算相关

JAVA中的位运算符有下面几种:

  1. 左移(<<)、右移(>>)、无符号右移(>>>)
  2. 位与(&)、位或(|)、位非(~)、位异或(^)

1. 位与####

参加运算的两个数据,按二进制位进行位与运算.

例如:3&5

  • 先将两个数据转化为二进制数,然后按位进行与运算,同为1结果为1,其它情况结果为0;
  • 即:11&101=001结果为1

特别提醒:负数按补码形式参加按位与运算

位与运算的特殊用途:

  1. 清零(将一个单元与0进行位与运算结果为零)
  2. 取一个数中指定位(例如取X=1010 1101的低四位 则将X&00001111得到0000 1101)。

2. 位或####

参加运算的两个数据,按二进制位进行位或运算

例如:3 | 5

  • 先将两个数据转化为二进制数,然后进行按位或运算,只要有一个是1结果为1,不然结果为0;
  • 即:11&101=111结果为7

特别提醒:负数按补码形式参加按位或运算

位或运算的特殊用途:

常用来对数据的某些位置1(例如将X=1010 1010的第四位置1,则将X |0000 1111得到1010 1111)。

3. 位非####

快速计算结果的方法:

a的值为-(a+1)。比如2=-3,~(-2)=1

具体计算说明:

位非操作实际上是对计算机的补码进行操作的。 即:先源码转补码,然后对补码进行逐位取反,最后再将处理后的补码转回源码

  1. 根据二进制源码获取其补码;
  2. 对补码进行按位取反;
  3. 将计算后的补码转换回源码。

对于正整数,其补码与源码相同,对于负数,其补码位源码的取反再加一

4. 位异或####

参加运算的两个数据,按二进制位进行位异或运算

例如:3^5

  • 先将两个数据转化为二进制数,然后进行按位异或运算,只要位不同结果为1,不然结果为0;
  • 即:11^101=110结果为6

异或运算的特殊用途:

  1. 使特定位翻转找一个数,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可。例:X=10101110,使X低4位翻转,用X ^0000 1111 = 1010 0001即可得到。
  2. 与0异或得到原值

JAVA基础1——字节&位运算的更多相关文章

  1. C166 8位字节位运算赋值-代码优化

    8位字节位运算赋值优化特记录下: unsigned short func1(){ unsigned short a; return a;} unsigned char func2(){ unsigne ...

  2. Java基础东西(按位操作运算)

    http://aokunsang.iteye.com/blog/615658 前奏:   昨天一哥们问我Java位移你会吗,我说不会,想想位移这么麻烦,一般有位移的Java代码一律不看,有几个人会啊, ...

  3. JAVA程序开发按位运算的记录

    忘记在哪里看到一个面试题:把int a,b的值互换,不能使用临时变量.刚开始完全懵逼,脑子里面全是浆糊,不知道如何下手.查看答案后猛地一惊,心想居然还有这种操作,真是叹为观止,真的感觉自己的基础是如此 ...

  4. java加密解密算法位运算

    一.实例说明 本实例通过位运算的异或运算符 “ ^ ” 把字符串与一个指定的值进行异或运算,从而改变每个字符串中字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,异或运算 ...

  5. Python新手学习基础之运算符——位运算

    位运算符 位运算实际上是把数字看作二进制来进行计算,它的运算法则如下: 结合实例,来看下位运算是如何进行的吧: 位运算在实际应用中用途很广泛,比如我们经常听到的子网掩码,它其实就是和IP地址做了按位与 ...

  6. 【Java基础】Java基本数据类型与位运算

    1.赋值运算符 赋值使用操作符“=”.它的意思是“取右边的值(即右值),把它复制给左边(即左值)”.右值可以是任何 常数.变量或者表达式 (只要它能 生成 一个值就行).但左值必须是一个明确的,已命名 ...

  7. Java基本数据类型与位运算

    >>赋值运算符 赋值使用操作符“=”.它的意思是“取右边的值(即右值),把它复制给左边(即左值)”.右值可以是任何 常数.变量或者表达式 (只要它能 生成 一个值就行).但左值必须是一个明 ...

  8. java基础篇 之 位运算符

    按位操作符 ​ 按位操作符用来操作基本数据类型中的单个"比特"(bit),即二进制位.按位操作符会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果. ​ 我们常用的按位操作 ...

  9. PHP基础语法之 位运算

    写了几年PHP的人都好奇说,没有用过位运算符.所以,此处你看二进制看的头晕,就去T¥M¥D吧. 位运算符基本不用,我们也将这个知识设置为了解级别.位运算符的知识点,你不想学习也可以.等以后用到位运算的 ...

随机推荐

  1. socket__服务端、客户端(注释版)

    # !/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017/8/22 16:14 # @Author : Mr_zhang # @Sit ...

  2. MySQL自定义函数用法详解-复合结构自定义变量/流程控制

    自定义函数 (user-defined function UDF)就是用一个象ABS() 或 CONCAT()这样的固有(内建)函数一样作用的新函数去扩展MySQL. 所以UDF是对MySQL功能的一 ...

  3. uva1629,Cake Slicing,记忆化搜索

    同上个题一样,代码相似度极高,或者说可以直接用一个模板吧 dp[i,j,p,q]表示一块长为j-i+1,宽为q-p+1,左上角在位置(i,j)上的蛋糕,dp[]表示当前状态下的最优值,然后对该块蛋糕枚 ...

  4. ASP.NET没有魔法——ASP.NET MVC使用Area开发一个管理模块

    之前的My Blog提供了列表的展示和文章显示功能,但是所有数据仍然只能通过数据库录入,为了完成最初的角色“作者”的用例,本章将介绍如何使用“Area”实现My Blog的管理功能. 根据功能分离代码 ...

  5. MongoDB全文检索

    1. 全文检索概念: 全文检索是对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式.  (暂时不支持中文) ...

  6. 使用python实现计算器功能

    学习python过程中的作业.实现了+.-.×./.及幂运算,支持括号优先级. 代码为python3.5 import re def formatEquation(string): string = ...

  7. iOS下OpenCV开发用OC还是Swift

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 其实标题中这个问题并不准确,准确的说法应该是iOS下的OpenCV开发是使用OC还是Swift ...

  8. Java基础笔记5

    方法(函数) 就是一块可以重复调用的代码块. 比如.100行代码. 在多处使用. 方法的格式 public static 返回类型 方法名称(参数列表){ } 返回类型:当方法被调用时,把返回内容 交 ...

  9. .12-Vue源码之patch(2)

    快完事咯! 简单看了下patch函数,虽然不长,但是实际上很长很长,慢慢来吧, 首先来个总览: // line-5250 // oldVnode => 原生DOM节点 // vnode => ...

  10. session设置过期的方法(转载)

    这篇文章主要介绍了php中实现精确设置session过期时间的方法,需要的朋友可以参考下   大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设 ...