java变量、二进制、数据类型、原码、补码、反码
1. 变量
1. 他 她 我 你 某人 佚名 旺财 X-man x = 1
您好! 它
(变量就是自然语言中的代词)
2. int age = 15;// 00000000 00000000 00000000 00001111
3. Java 中的变量
a Java是强类型语言,
b 变量必须声明,并且初始化以后使用
c 变量必须有明确的类型
d 变量不能重复定义
4. 变量的作用域
a 在声明的地方开始,到块结束为止
b 离开变量的作用域结束,变量将回收。
2. 二进制
1. 计算机内部只有二进制数据!
int i = 15; char c = 'A';
'A'-> 00000000 01000001
15 -> 00000000 00000000 00000000 00001111
115 = 1*100 + 1*10 + 5*1
= 1×10^2 + 1×10^1 + 5×10^0
基数: 10
权: 基数^n
基数:2
权: 128 64 32 16 8 4 2 1
2. 二进制: 1111= 1*2^3+1*2^2+ 1*2^1 + 1*2^0
= 1*8 + 1*4 + 1*2 + 1*1
= 15(10)
8421
1001 = 9
01000001 = 1*64 + 1*1
= 65(10)
128 64 32 16 8 4 2 1
1 1 0 0 0 0 0 0 = 192(10)
3. 十进制: 65 = 6*10 + 5*1
= 6*10^1 + 5*10^0
256 128 64 32 16 8 4 2 1
95(10)= 0 1 0 1 1 1 1 1 (2)
int age = 15;
age = 00000000 00000000 00000000 00001111
int age = 0xf;
4. 16进制
0 1 2 3 4 5 6 7 8 9 a b c d e f
10 11 12 13 14 15
41(16) = 4 * 16 +1 = 65(10)
4 1
0100 0001(2) = 65(10)
* 将16进制作为2进制的简写形式.
4e2d(16)=0100 1110 0010 1101(2)
5. 八进制是二进制的简写,3位对应转换
3.原码、补码、反码
1、原码:一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码。
比如 00000000 00000000 00000000 00000101 是 5的 原码。
10000000 00000000 00000000 00000101 是 -5的 原码。
备注:
比如byte类型,用2^8来表示无符号整数的话,是0 - 255了;
如果有符号, 最高位表示符号,0为正,1为负,那么,正常的理解就是 -127 至 +127 了.这就是原码了,
值得一提的是,原码的弱点,有2个0,即+0和-0(10000000和00000000);
还有就是,进行异号相加或同号相减时,比较笨蛋,先要判断2个数的绝对值大小,然后进行加减操作,最后运算结果的符号还要与大的符号相同;
于是,反码产生了。
2、 反码:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反[每一位取反(除符号位)]。
取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)
比如:正数00000000 00000000 00000000 00000101 的反码还是 00000000 00000000 00000000 00000101
负数10000000 00000000 00000000 00000101 的反码则是 11111111 11111111 11111111 11111010。
反码是相互的,所以也可称:10000000 00000000 00000000 00000101 和 11111111 11111111 11111111 11111010互为反码。
备注:还是有+0和-0,没过多久,反码就成为了过滤产物,也就是,后来补码出现了。
3、 补码:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.
比如:10000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。
那么,补码为:
11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011
备注:1、从补码求原码的方法跟原码求补码是一样的 ,也可以通过完全逆运算来做,先减一,再取反。
2、补码却规定0没有正负之分
所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB。
举例:
a. -2*2 = -4
-2 1110
X 2 0010
---------------
0000
1110
0000
+ 0000
----------------
-4 1100
b. -2 + 3 = 1
-2 1110
+ 3 0011
111
-----------------
1 0001
c. -1+-1 = ?
-1 1111
-1 1111
+ 1111
-------------------
-2 1110
d. 7+1 = ?
7 0111
+ 1 0001
-----------------
-8 1000
e.~3 + 1 = ?
3 0011
~3 1100
+1 0001
------------
-3 1101
-3 1101
~-3 0010
+1 0001
-------------
3 0011
强调:补码运算时负号只与第一位数相连,然后再与后面的数进行运算,如上例-1+-1(1110为-2的补码),~3 + 1(1101为-3的补码)
总结:
正数的反码和补码都与原码相同。
负数的反码为对该数的原码除符号位外各位取反。
负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1
源码:优点在于换算简单 缺点在于两个零 加减法需要独立运算
反码:有点在于表示清晰 缺点在于两个零 加减法同样需要独立运算
补码:优点在于一个零 范围大 减法可以转为加法 缺点在于理解困难
4.Java的数据类型
1. Java数据分为基本类型和引用类型. Person someone
2. 基本类型分为八种:
byte short int long float double char boolean
(a) 整数类型 byte short int long
整数都是有符号整数
byte 8bit -128 ~ +127
short 16bit -32768 ~ 32767
int 32bit -2G ~ 2G-1 -2^31 ~ 2^31-1
long 64bit -2^63 ~ 2^63-1
int a = 5;
建议使用int, 很少使用short,使用int要注意取值范围, int 的值不大!
直接量-字面量: 直接给出的常量值如: 1
a. 整数的直接量的类型默认是int类型
b. 以L,l为结尾的字面量是long类型
1024
1024L
c. 可以使用整数直接量给byte,short类型赋值,但是不要超过byte和short的范围.
(b) 浮点数: 就是小数, float, double
34642323.44 = 3.464232344 * 10^7
尾数 指数
10001000.(2)
1.0001000 * 2^111(2)
尾数 指数
float 32位
0 00000111 10001000000000000000000
符号位 指数 尾数
int a = 0x7fffffff;
float f = a;
double
1 符号位
11 指数
52 尾数
a. double 是64位, float 32位
double比float精确
b. 默认的浮点数字面量是: double类型的
字面量后缀: d/D f/F
double d = 1d;//1.0
1 1L 1D 1F
c. 只使用double计算浮点数,float类型基本不用!
浮点数不能精确运算
int:10001000 -> float:1.0001000*2^111
0 00000111 10001000 00000000 0000000
(c) 字符类型:char, 字符类型是一个16位无符号整数!
a. 字符类型的值是对应字符的编码, 是unicode编码. Java支持国际化.
英文部分的值与ascII编码一致.
char是定长编码, 所有的字符都是16位.
'A' -> 0x0041
'中'-> 0x4e2d
在编码中: '0'~'9' , 'a'~'z', 'A'~'Z'都是连续编码的!
'0'=='\u0000' '\u0000'==0
b. 最小值:0, 最大值:65535 = 2^16-1
c. 字符字面量使用单引号为定界符号:'中'
字面量也是整数常量!
特殊字符采用转义字符表示:
如: '\n' '\t' '\\' '\b' '\r'
'\'' '\"' '\u4e2d'
char c = '\\';
(d)布尔类型: boolean
字面量: true false
float f = (float)2.6D;
char c = 65;
5.数据类型转换:
1. 自动类型转换(隐式类型转换)
从小类型到大类型, 自动完成
如: int n = 'A';
long l = 'A';
char-------->int------>long------->float------>double
byte------->short------->int------>long------->float------>double
2. 强制类型转换, 从大类型到小类型需要强制转换
强制类型转换有风险, 会造成精度损失或者溢出
char<--------int<------long<-------float<------double
byte<-------short<-------int<------long<-------float<------double
long l = 1024L*1024*1024*4;//0x100000000
int i = (int)l;//0
double pi = 3.1415926535897932384626;
float f = (float)pi;
若有不完善的地方请大家多提意见,转发时请注明出处!
java变量、二进制、数据类型、原码、补码、反码的更多相关文章
- Java:二进制(原码、反码、补码)与位运算
一.二进制(原码.反码.补码) 二进制的最高位是符号位(“0”代表正数,“1”代表负数): Java中没有无符号数: 计算机以整数的补码进行运算: 1. 原码:将一个整数转换成二进制表示 以 int ...
- C正数负数的原码补码反码以及内存地址分析
#include<stdio.h> void swap(int a, int b); void main1(){ int i = 10; //正数的原码 00000000 00000000 ...
- java 变量及数据类型、原码、反码、补码
Java基础——变量及数据类型 变量的概念 内存中的一个存储区域 变量名+数据类型 可在同一类型范围内不断变化 为什么定义变量: 用于不断的存放同一类型的常量,并可以重复使用 使用变量注意: 变量的作 ...
- 二进制原码、反码、补码以及Java中的<< 和 >> 和 >>> 详细分析
1.计算机二进制系统中最小单位bit 在计算机二进制系统中: bit (位) :数据存储的最小单元. 简记为b,也称为比特(bit),每个二进制数字0或1就是一个位(bit),其中,每 8bit = ...
- 位移&二进制转换&原码&反码&补码
<< 左移 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零. 格式 需要移位的数字 << 移位的次数 计算过程 1. 按二进制形式把所有的数字向左 ...
- Java基础 - 原码、反码、补码
目录 机器数 真值 原码 反码 补码 为什么使用原码. 反码. 补码 机器数 所有数字在计算机底层都是以二进制形式存在的.它的表现形式叫做机器数,这个数有正负之分,最高位为符号位.0 表示正数, 1 ...
- JavaSE教程-03深入探究原码,反码,补码-扩展
1.原码,反码,补码的基础概念和计算方法 在搞清楚为什么计算机要使用补码之前,我们先搞清楚一个基本知识点,就是原码,反码,补码的计算方式. 对于一个数,计算机要使用一定的编码方式进行存储,原码,反码, ...
- 【深入浅出-JVM】(2):原码、反码、补码
计算机中有补码表示 0 0 为正数 原码 00000000 00000000 00000000 00000000 反码 00000000 00000000 00000000 00000000 正数反码 ...
- Java 数字用二进制表示,以及原码,反码,补码、负数的二进制表示
首先我们要对原码.反码和补码有个了解: 1.所谓原码就是二进制定点表示法,即最高位为符号位,"0"表示正,"1"表示负,其余位表示数值的大小. 2.反码表示法规 ...
- (7)java基础知识-原码、反码、补码、运算符
一.原码.反码.补码 原码 一个数转化成二进制. 用最高位来表示正负,最高位为0表示正数,最高位为1表示负数. 例如: short i=5: 因为在java里short占2个字节转化成二进制就是 00 ...
随机推荐
- 关于php的一些安全知识
绝不要以明文形式显示或发送密码.即使是对密码的所有者也应该这样.如果你需要 "忘记密码" 的功能,可以随机生成一个新的 一次性的(这点很重要)密码,然后把这个密码发送给用户 你希望 ...
- 新技术探究之 GraphQL
What? GraphQL 是一种类似于 SQL 的结构化查询语言,由 facebook 于2012年创造,于2015年开源.SQL 在服务端定义,GraphQL 在客户端定义,也就是说 GraphQ ...
- ZooKeeper介绍,安装,配置文件解析
什么是ZooKeeper? ZooKeeper是用于维护配置信息,命名,提供分布式同步和提供组服务的集中式服务. 所有这些类型的服务都以分布式应用程序以某种形式或另一种形式使用.每次实施时,都有很多工 ...
- 改变图像,运用match方法判断
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>菜鸟 ...
- VMwareTools安装失败提示找不到C headers和gcc目录
在VMware虚拟机上安装好linux系统后,发现往往不能全屏,也不能设置共享文件夹进行文件共享,这时候可以通过安装VMwareTools这个工具来实现文件拖拽.共享和全屏. 安装的过程不再赘述,关键 ...
- JProfiler - Java的性能监控工具
简介 JProfiler是一款Java的性能监控工具.可以查看当前应用的对象.对象引用.内存.CPU使用情况.线程.线程运行情况(阻塞.等待等),同时可以查找应用内存使用得热点,即:哪个对象占用的内存 ...
- Python学习笔记——import模块
OS模块 直接输出系统命令到屏幕,该方法获取的命令返回值不可被赋值给变量,输出结果受编码影响会乱码: import os os.system("ipconfig") 将执行获取的系 ...
- zabbix的Java API(一)
上文说了,我是对zabbix做第二次开发的小白,既然要对zabbix做第二次开发又是小白,那么就得来研究zabbix提供的相关API了. 于是我在zabbix网站各种找,终于在下面网址找到了: htt ...
- python中的判断语句与循环语句
if语句 每条if语句的核心都是一个值为Ture或False的表达式,这种表达式被称为为条件测试.if语句检查程序当前状态,并据此采取相应的措施.如果条件测试的值为Ture,Python就执行紧跟在i ...
- showcase,开发中必须引起重视的小环节
有人说,测试者来自火星,开发者来自金星.这是因为软件测试员和软件开发者就好比一对冤家,里面的缘由说不清也道不明.开发代表着创造,而测试则代表着摧毁,因为测试的目的就是以各种方式不断地从开发出的产品中发 ...