java编程基础(一)二进制

本文介绍了计算机中二进制的基本概念及应用,包括二进制与十进制的转换方法、二进制数值表示原理,以及Java中整数类型的具体实现。

二进制

对于任何已知类型的传统计算机而言,均以1和0作为编码形式进行程序计算。
在电路结构中,高电平与低电平对应表示1和0。

计算机内部表示任何数据都是用二进制。而与人进行交互时,可以将数据转换成人可以理解的内容:10进制、文字、图片、音频视频。

不同进制的计算方式是相通的:

十进制十进制逢十进一二进制二进制逢二进一
9+1 --> 101+1 --> 10
99+1 --> 10011+1 --> 100

从0开始一直加1:

十进制二进制
00
11
210
311
4100
5101
6110
7111
81000
91001
101010
111011
12810000000

十进制乘10和二进制乘2运算比较:

十进制乘10二进制乘2
93*10 --> 9301*2 --> 10
930*10 --> 930010*2 --> 100
9300*10 --> 93000100*2 --> 1000
93000*10 --> 9300001000*2 --> 10000

常用的二进制值:

十进制二进制用2的指数表示
112^0
2102^1
41002^2
810002^3
16100002^4
321000002^5
6410000002^6
128100000002^7
2561000000002^8
51210000000002^9
1024100000000002^10
20481000000000002^11
409610000000000002^12
8192100000000000002^13

每加一个0都是乘2,所以用2的指数来表示。
例如 10000000,1后面有7位,就可以用2的7次方表示。

用2的指数可以很方便的表示任意的数字值:

10进制2进制2的指数
1000000012^0
8000010002^3
16000100002^4
32001000002^5
相加相加
5700111001-

面试题

1000个苹果,分装在若干箱子中,不管客户要多少个苹果,都可以直接交付给客户几个箱子。

问:这1000个箱子如何进行装箱?

bit 和 byte

  • bit - 位
  • byte - 字节

在这里插入图片描述
一个 bit 表示一个电位,1 或 0;一个 byte 表示 8 个电位。

个人安装的光纤宽带如果是 100 兆宽带,下载最高速度只能到十几兆,这是因为采用的表示单位不同。100兆宽带指的是100兆bit,我们一般说下载速度指的是byte,那么100兆bit换算成byte需要除8,也就是 12.5 兆 byte。

java 中的 byte 类型

java 中的byte类型整数是单字节类型,也就是说,它使用 8 位(bit) 来表示整数。

8 位(bit)能表示的数字:

10进制2进制
000000000
100000001
200000010
300000011
400000100
500000101
600000110
700000111
800001000
25511111111

但是,java中,byte类型的左侧的一位规定用来表示符号,0表示正数,1表示负数。那么它表示数字的位就只有7位,而不是8位:

java 中 byte 类型表示正数:

10进制2进制
00000 0000
10000 0001
2000 0010
30000 0011
40000 0100
50000 0101
60000 0110
70000 0111
80000 1000
1270111 1111

java 中 byte 类型表示负数:

java 的 byte 类型如何表示负数?我们先从0-1 这个运算来看:

2进制

java 中的负数运算,执行的是与正数相同的加减运算,这样执行 0-1 运算得到的二进制值是 11111111,表示 -1,那么可以以此类推,继续执行减1运算减到最小:

10进制2进制
-1281000 0000
-81111 1000
-71111 1001
-61111 1010
-51111 1011
-41111 1100
-31111 1101
21111 1110
-11111 1111
----------------------------------------
00000 0000
10000 0001
20000 0010
30000 0011
40000 0100
50000 0101
60000 0110
70000 0111
800001000
1270111 1111

四种整数类型的最小和最大值

与 byte 类型同理,short,int 和 long 也是用相同的方式表示整数。这四种类型的最小值和最大值分别可以这样表示:

byte(1字节,8位):

2进制2的指数
最小1000 0000-2^7
最大0111 11112^7 - 1

short(2字节,16位):

2进制2的指数
最小10000000 00000000-2^15
最大10000000 000000002^15 - 1

int(4字节,32位):

2进制2的指数
最小10000000 00000000 00000000 00000000-2^31
最大01111111 11111111 11111111 111111112^31 - 1

long(8字节,64位):

2进制2的指数
最小10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000-2^63
最大01111111 11111111 11111111 11111111 11111111 11111111 11111111 111111112^63 - 1

二进制和十进制的互转

java 中提供了二进制和十进制的互转方法:

  • 十进制转二进制
    Integer.toBinaryString(int i)
String s = Integer.toBinaryString(257);
System.out.println(s);

// 打印结果: 100000001

  • 二进制转十进制
    Integer.parseInt(String s, int radix)
  • 第二个参数指定进制
  • 这里不支持直接使用负数的二进制码来表示负数,而是要用正数的二进制码添加负号来表示
int a = Integer.parseInt("1100101101", 2);
System.out.println(a);

// 打印结果: 813

练一练

输入十进制整数转成2进制;输入二进制整数转成十进制。

package demo;

import java.util.Scanner;

public class Test2 {
    public static void main(String[] args) {
        while (true) {
            System.out.print("输入十进制整数:");
            int a = new Scanner(System.in).nextInt();
            String s = Integer.toBinaryString(a);
            System.out.println(s);
        }
    }
}

package demo;

import java.util.Scanner;

public class Test3 {
    public static void main(String[] args) {
        while (true) {
            System.out.print("输入整数的二进制码:");
            String s = new Scanner(System.in).nextLine();
            int a = Integer.parseInt(s, 2);
            System.out.println(a);
        }
    }
}

java 代码中直接写二进制字面值

java 语法中,可以使用 0b 前缀来直接写二进制码表示的整数:

int a = 0b11001;
byte b = 0b1111111;

// 0b前缀语法不允许直接写负数的二进制码,这样写实际表示的是正的128
byte c = 0b10000000; //此处错误

// 要写byte的最小值-128,需要写 128 的二进制码,并加负号
byte d = -0b10000000;

代码仓库

https://gitee.com/benwang6/java-review

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GTC_GZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值