进制

进制基础, 目的:理解计算机只能处理2进制的数据和指令

1)10进制计数规律

  数字: 0 1 2 3 4 5 6 7 8 9

  基数:10

  权:  1000 100 10 1 权是基数的n次幂

2)2进制计数规律

  数字: 0 1

  基数:2

  权:  128 64 32 16 8 4 2 1 权是基数的n次幂

(10)   (2)

0      0

1      1

2     10

3     11

4    100

5    101

6    110

7    111

8   1000

9   1001

10   1010

11   1011

12   1100

13   1101

14   1110

15   1111

  展开式:

  11001010(2) = 128+64+8+2 = 202(10)

  234(10) = ?(2)

128 64 32 16 8 4 2 1

234(10) =  1   1  1  0 1 0 1 0 (2)

106 42 10    2   0

二进制补码! 成本考虑, 为省钱!

以4位补码为例

1) 将高位为1的大数, 作为负数使用! 最高位称为符号位.

2) 计算时候如果超过4位数, 多出数位自动溢出舍弃.

3) 在不超过范围情况下, 补码运算满足数学规则

4) 缺点 数字有范围, 不能进行超范围计算

补码的取反对称现象: -n = ~n + 1

符号位扩展现象: 低位数补码扩展为高位数补码: 正数补0 负数补1

(10) 4位补   8位补            32位补码

min            --------              10000000 00000000 00000000 00000000

8  0     0   0    0   0   0   0

...

-129          --------              11111111 11111111 11111111 01111111

-128   ----   10000000        11111111 11111111 11111111 10000000

-127   ----   10000001

-126   ----   10000010

....

-10    ----   11110110

-9    ----   11110111

-8   1000   11111000

-7   1001   11111001

-6   1010   11111010

-5   1011   11111011

-4   1100   11111100

-3   1101   11111101     11111111 11111111 11111111 11111101

-2   1110   11111110     11111111 11111111 11111111 11111110

-1   1111   11111111      11111111 11111111 11111111 11111111

0   0000  00000000     00000000 00000000 00000000 00000000

1   0001  00000001     00000000 00000000 00000000 00000001

2   0010  00000010     00000000 00000000 00000000 00000010

3   0011  00000011     00000000 00000000 00000000 00000011

4   0100  00000100

5   0101  00000101

6   0110  00000110

7   0111  00000111

8   ----   00001000

9   ----   00001001

10   ----   00001010

...

126  ----   01111110

127  ----   01111111      00000000 00000000 00000000 01111111

128  ----   --------        00000000 00000000 00000000 10000000

129  ----          --------        00000000 00000000 00000000 10000001

....

max  ----  --------             01111111 11111111 11111111 11111111

7   f    f   f    f   f    f   f

代码实现 输出-128到127的二进制:

for(int i=-128;i<=127;i++){

  String bin=Integer.toBinaryString(i);

  int n=32-bin.length();

for(int j=0;j<n;j++){

    System.out.print("0");

}

  System.out.println(bin);

}

-3   1101

-3   1101

+     11 1

-------------

-6   1010

-5 的补码: -5 = ~5 + 1

0101

1010

1011

16 进制计数规律

数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f

基数:16

权:  256 16 1

权是基数的n次幂

16进制用于简化2进制的书写!

每4位2进制数据 可以简写为1位16进制数

16进制就是2进制!

10    16            2

0    00    0000  0000

1    01    0000  0001

2    02    0000  0010

3    03    0000  0011

4    04    0000  0100

5    05    0000  0101

6    06    0000  0110

7    07    0000  0111

8    08    0000  1000

9    09    0000  1001

10    0a    0000  1010

11    0b    0000  1011

12    0c    0000  1100

13    0d    0000  1101

14    0e    0000  1110

15    0f    0000  1111

16    10    0001  0000

17    11    0001  0001

18    12    0001  0010

...

65    41    0100  0001

66    42    0100  0010

...

192    c0    1100  0000

193    c1    1100  0001

...

255    ff    1111  1111

System.out.println(010+2);//10

进制的总结:

1) 计算机只能处理 2 进制数据(经常是补码)!

2) 计算机内部没有 10 进制 和 16进制

3) 10进制是人类 处理数据的习惯,Java 利用API 提供算法(方法)实现 10进制的处理!

4) 16 进制 是便捷的 2进制书写格式!

5) 一切交给计算机的处理的数据,都要转换为2进制!

原码  反码  补码

1. 原码是指将最高位作为符号位(0表示正,1表示负),其它数字位代表数值本身的绝对值的数字表示方式。例如:数字6在计算机中原码表示为:0000 0110。

  用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下:
          ( 1 ) 10- ( 1 )10 = ( 1 )10 + ( -1 )10
= ( 0 )10
          (00000001) + (10000001) = (10000010) = ( -2 ) 显然不正确.

2. 反码表示规则为:如果是正数,则表示方法和原码一样;如果是负数,则保留符号位1,然后将这个数字的原码按照每位取反,则得到这个数字的反码表示形式。

例如,数字6在8位计算机中的反码就是它的原码:0000 0110  数字(-6)在8位计算机中的反码为:1111
1001

因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算:
           ( 1 )10 - ( 1 ) 10= ( 1 ) 10+ ( -1 ) 10=
( 0 )10
           (00000001) +
(11111110) = (11111111)  = ( -0 ) 有问题.
           ( 1 )10 - ( 2)10 = ( 1 )10 + ( -2 )10
= ( -1 )10
           (00000001) 反+ (11111101)反 = (11111110)反 = ( -1 ) 正确

   问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0),所以补码的表示范围为:(-128~0~127)共256个。

3. 所以补码的设计目的是: 1)使符号位能与有效值部分一起参加运算,从而简化运算规则. 2)使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计

java基础(2)--进制的更多相关文章

  1. Java基础(进制转换-)

    进制概述: 进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数). 对于任何一种进制---X ...

  2. Java 基础------16进制转2进制

    我们知道,数字8用二进制表示为:1000 用16进制表示为:8 那么我给你一个16进制的数字,0x7f,他的二进制是什么呢? 一个16进制的位数,用4位表示.比如,0x 7 f 其中: 7用4位二进制 ...

  3. java基础值进制转换

    十进制转换为二进制: 解: 十进制数42连续除以2,当被除数为0时停止除以2,将余数倒加即为结果 :42(10)=101010(2) 注: 计算机内部表示数的字节单位是定长的,且只能是字节(1byte ...

  4. Java基础之进制转换

    1.十进制与二进制之间的转换 (1)十进制转二进制的方法:使用十进制的数据不断除以2,直到商为0为止,从下往上取余就是对应的二进制. (2)二进制转十进制:使用二进制的每一位乘以2的n次方,n从0开始 ...

  5. Java I/O : Java中的进制详解

    作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算.这一讲,泥瓦匠带你走进Java中的进制详解. 一.引子 在Java世界里,99%的工作都是处理这高层. ...

  6. java中16进制转换10进制

    java中16进制转换10进制 public static void main(String[] args) { String str = "04e1"; String myStr ...

  7. java中的进制转换

    java中的进制转换及转换函数 转自:https://blog.csdn.net/V0218/article/details/74945203 Java的进制转换 进制转换原理 十进制 转 二进制: ...

  8. java利用16进制来辨别png格式的图片

    很多人知道利用.png的字符串结尾可以判断前端传入的图片是否为png格式,但是这只是潜意识的判断!那么如何利用png读写的特殊内容来深意识地判断图片格式呢?最近在做东西的时候遇到了点问题,在加载图片的 ...

  9. java中的进制转换方法

    java中进行二进制,八进制,十六进制,十进制间进行相互转换 关键字: java 进制转换 十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer ...

随机推荐

  1. python 之 re模块(正则表达式)

    一.起源(历史) 正则表达式的“鼻祖”或许可一直追溯到科学家对人类神经系统工作原理的早期研究.美国新泽西州的Warren McCulloch和出生在美国底特律的Walter Pitts这两位神经生理方 ...

  2. C/C++求职宝典重点笔记

    这是我之前准备找工作时看<C/C++求职宝典>一书做的笔记,都是一些笔试面试中常考的重点难点问题,但比较基础,适合初学者看. 1. char c = '\72'; 中的\72代表一个字符, ...

  3. 活动窗口(Active),焦点窗口(Focus)和前景窗口(Foreground)之间的关系

    活动窗口(Active),焦点窗口(Focus)和前景窗口(Foreground)之间的关系 任何一个时候,我们的Windows桌面上总有一个最前台的窗口,其实说简单的,就是标题栏变成深蓝色的那个窗口 ...

  4. 关于canvas绘制大转盘并旋转

    O(∩_∩)O包子不才,最近磕磕巴巴写了一个大转盘的效果.现在想说一下整个的思路部分,要是有设么不对的还请多多指教,期待共同成为优秀的前端~~大转盘整个思路: 绘制整个转盘 编写一个随机数,用来当接口 ...

  5. ThinkPHP中通过URL重写隐藏应用的入口文件index.php的相关服务器的配置

    [ Apache ] 将httpd.conf配置文件中mod_rewrite.so所在行前面的‘#’去掉 AllowOverride None 将None改为 All 效果图

  6. 巨蟒python全栈开发-第11天 第一类对象 闭包 迭代器

    一.今日主要内容总览(重点) 1.第一类对象->函数名=>变量名 (1)函数对象可以像变量一样进行赋值 (2)还可以作为列表的元素进行使用 (3)还可以作为返回值返回 (4)还可以作为参数 ...

  7. 《挑战程序设计竞赛》2.3 动态规划-进阶 POJ1065 1631 3666 2392 2184(5)

    POJ1065: Description There is a pile of n wooden sticks. The length and weight of each stick are kno ...

  8. 个案排秩 Rank (linear algebra) 秩 (线性代数)

    非叫“秩”不可,有秩才有解_王治祥_新浪博客http://blog.sina.com.cn/s/blog_8e7bc4f801012c23.html 我在一个大学当督导的时候,一次我听一位老师给学生讲 ...

  9. Java基础语法 - 面向对象 - 局部变量

    如果在一个成员方法内定义一个变量,那么这个变量就被称为局部变量. 局部变量在方法执行时被创建,在方法执行结束时被销毁.局部变量在使用时必须进行赋值操作或被初始化,否则会出现编译错误 package m ...

  10. SQL CHECK sql server免费监控单实例工具

    SQL Check 阅读目录 SQL Check? 主要特点 说说不足 下载地址 小结 一款实时性能监测工具 回到目录 SQL Check? 一款实时监测SQL数据库性能.实时排查的问题的免费工具. ...