binary
来源:互联网 发布:return java 编辑:程序博客网 时间:2024/05/21 10:07
二进制
2进制在哪里?
计算机内部 只有 2进制数据!
int i = 50;System.out.println(i);//"50" Integer.toString(i)
Java编程语言, 编程语言利用算法支持10进制, 使用用户感受上可以使用10进制!
编程语言: 人类与计算机沟通的桥梁!
显示2进制数据
int i = 50;// Integer.parseInt();System.out.println(Integer.toBinaryString(i));
- Java 如何接收10进制数据: Integer.parseInt();
- 将10进制字符串转换为2进制int
Java 如何输出10进制数据: Integer.toString();
- 将2进制int转换为10进制字符串
Scanner in = new Scanner(System.in);
int n = in.nextInt();// 底层调用了 Integer.parseInt();
什么是2进制
逢2进1的计数规则
16进制
16进制用于简写2进制
4位2进制可以简写为一位16进制数字
经典面试题:
int i = 0x32; //0011 0010System.out.println(i);如上代码输出结果( ) 答案: 50int i = 0xac; System.out.println(i);如上代码输出结果( ) 答案:
补码
计算机处理 有符号数(负数) 问题的算法.
补码算法: 4位数补码
规则:
- 总的位数是4位数
- 如果计算结果超过4位自动溢出舍弃
经典面试题目:
int n = 0xffffffff;System.out.println(n);如上代码输出结果是:( )A.2147483647 B.-2147483648 C.-2147483647 D.-1答案: D判断对错: 正数相加溢出结果是负数?答案: 错!System.out.println(~8+1); 输出结果是( )答案: -8System.out.println(~8); 输出结果是( )答案: -9System.out.println(~-8); 输出结果是( )答案: 7
2进制运算符
~
取反(非) &
与运算 |
或运算 >>>
逻辑右移动运算 >>
数学右移动运算 <<
左移动运算
&
与运算
0 & 0 = 00 & 1 = 01 & 0 = 01 & 1 = 1n = 01001001 01110111 10101010 01010101m = 00000000 00000000 00000000 00111111 &---------------------------------------k = 00000000 00000000 00000000 00010101int n = '中';int m = 0x3f;int k = n&m;println(Integer.toBinaryString(n));println(Integer.toBinaryString(m));println(Integer.toBinaryString(k));
|
或运算(逻辑+)
0 | 0 = 00 | 1 = 11 | 0 = 11 | 1 = 1n = 00000000 00000000 00000000 00101101m = 00000000 00000000 00000000 10000000 | ----------------------------------------k = 00000000 00000000 00000000 10101101int n = 0x2d;int m = 0x80;int k = n | m;println(Integer.toBinaryString(n));println(Integer.toBinaryString(m));println(Integer.toBinaryString(k));
>>>
逻辑右移动运算
n = 00100010 01111010 10101010 10111011m = n>>>1 000100010 01111010 10101010 1011101 k = n>>>2 0000100010 01111010 10101010 101110int n = 0x227aaabb;int m = n>>>1;int k = n>>>2;int j = n>>>6;//按照2进制输出
移位运算的数学意义
移动小数点运算:
124238. 小数点向右移动1242380. 小数点向右移动 1次, 数值*1012423800. 小数点向右移动 2次, 数值*10*10假设小数点位置不变 124238. 数字向左移动 1242380. 数字向左移动 1次, 数值*1012423800. 数字向左移动 2次, 数值*10*10
2进制数字移动, 与10进制数字移动规律相同: 2进制数值向左移动一次, 数值*2
n = 00000000 00000000 00000000 00110010. = 50n<<1 = 0000000 00000000 00000000 001100100. = 100n<<2 = 000000 00000000 00000000 0011001000. = 200
案例:
int n = 50;int m = n<<1;println(m); //100
>>
数学右移位计算:
- 相当于将原数据进行除法, 结果向小方向取整数.
>>
数学移位: 正数高位补0, 负数高位补1, 有数学意义>>>
逻辑移位: 高位补0, 负时候没有数学意义
案例:
n = 11111111 11111111 11111111 11110111 -9n>>1 = 111111111 11111111 11111111 1111011 -5n>>>1= 011111111 11111111 11111111 1111011 很大
案例:
...
一般情况下单纯的将数字向右移动, 请使用
>>>
面试题:
优化 n*8 的计算为 ( )答案: n<<3优化 n*16 的计算为 ( )答案: n<<4
阅读全文
0 0
- Binary
- Binary
- Binary
- Binary
- binary
- Binary
- binary
- binary
- Binary search
- Binary tree
- Binary Search
- binary.c
- Binary Search
- binary search
- Binary Tree
- Binary Path
- Binary Tree
- binary search
- 史上最全的Maven Pom文件标签详解
- 常见的并行程序设计问题的解决方法
- 栈:栈、队列基本概念
- servlet之cookied/session深入浅出(cookie)
- java使用itext按页码拆分pdf
- binary
- six
- 彻底理解Redis有效期问题
- c++ 学习笔记
- C语言中 使用popen函数向linux系统发送shell命令
- POJ 3268 Silver Cow Party 最短路 dijkstra
- dows命令安装pymysql 和 Django
- 实体标签
- 操作系统复习-3.2覆盖与交换