二进制转化、<<、>>、>>>移位运算
参考资料:
https://www.cnblogs.com/wxb20/p/6033458.html
https://www.cnblogs.com/joahyau/p/6420619.html
https://www.cnblogs.com/yulinfeng/p/6602902.html
https://www.cnblogs.com/hongten/p/hongten_java_yiweiyunsuangfu.html
https://www.cnblogs.com/xkfz007/articles/2590472.html(带小数)
一、十进制转化二进制
1、正数转化:
正数25:
25/2 | 12 | 1 |
12/2 | 6 | 0 |
6/2 | 3 | 0 |
3/2 | 1 | 1 |
1/2 | 0 | 1 |
最后一列,倒序排列即为二进制值。
则:25的二进制为:11001 然后32位,高位补0,即:
0000 0000 0000 0000 0000 0000 0001 1001
2、负数转化:
负数-25
1、先算出正数的二进制。
2、求反码,即二进制中1变0,0变1
3、反码+1
所以-25
1、对应的正数25对应的二进制为:
0000 0000 0000 0000 0000 0000 0001 1001
2、反码:
1111 1111 1111 1111 1111 1111 1110 0110
3、反码+1:(补码)(如果最后一位本身为1,则进位,列如1011 +1 为1100)。
1111 1111 1111 1111 1111 111 1110 0111
即为-25的二进制表示值。
二、二进制转化十进制
1、正数转化(不够32位高位补0)
011 1001
654 3210
则为:0*2^6+1*2^5+1*2^4+1*2^3+0*2^2+0*2^1+1*2^0=0+32+16+8+0+0+1=57
2、负数转化(最高位为1则为负数)
1、先算反码,即二进制中1变0,0变1
2、反码+1(补码)
3、算出对应的正数在加上负号。
例:
1111 1111 1111 1111 1111 1111 1010 1111
反码:
0000 0000 0000 0000 0000 0000 0101 0000
反码+1(如果最后一位本身为1,则进位,列如1011 +1 为1100)。
0000 0000 0000 0000 0000 0000 0101 0001
算正数:
1*2^6+0*2^5+1*2^4+0*2^3+0*2^2+0*2^1+1*2^0=64+0+16+0+0+0+1=81
即十进制为-81.
3、八进制、十六进制、十进制、二进制
01111111111111111111111111111001
十进制负数转八进制、十六进制
负数转换成八进制、十六进制,只需在补码(二进制)的基础上,3位合成一位计算,或者4位合成一位计算
-3的转换成二进制为:
1111 1111 1111 1111 1111 1111 1111 1101
八进制则将-3的二进制从右至左每3位为一个单元,不够三位用0补 即:
011 111 111 111 111 111 111 111 111 111 101
计算每一个单元,结果为:37777777775
十六进制则将-3的二进制从右至左每4位合并为一个单元,即:
1111 1111 1111 1111 1111 1111 1111 1101
计算后为: FFFFFFFD
转换十进制-3为八进制和十六进制
十六进制(0,1,2,3,4,5,6,7,8,9,A,B,C,D,F)
三:>>,<<,>>>移位运算
1、<<
<<,有符号左移位,将运算数的二进制整体左移指定位数,低位用0补齐。
正数:5<<2
1、转化为二进制:
0000 0000 0000 0000 0000 0000 0000 0
2、整体左移指2位数
0000 0000 0000 0000 0000 0000 0001 0100
3、转化为十进制
1*2^4+1*2^2=16+4=20
M<<N相当于M*2^n.
负数:-5<<2
1、转化为二进制:
1111 1111 1111 1111 1111 1111 1111
2、整体左移指2位数
1111 1111 1111 1111 1111 1111 1110 1100
3、转化为十进制
-20
M<<N相当于M*2^n.
2、>>
>>有符号右移位,将运算数的二进制整体右移指定位数,正数高位用0补齐,负数高位用1补齐(保持负数符号不变)
正数:5>>2
1、转化为二进制:
0000 0000 0000 0000 0000 0000 0000 0101
2、整体右移指2位数
0000 0000 0000 0000 0000 0000 0000 0001
3、转化为十进制
1*2^0=1
M>>N相当于M/2^n 取商
负数:-5>>2
1、转化为二进制:
1111 1111 1111 1111 1111 1111 1111 1011
2、整体右移指2位数
1111 1111 1111 1111 1111 1111 1111 1110
3、转化为十进制
-2
M<<N相当于如果运算数是偶数,那么那么它的运算结果就是 x = -(|x| / 2),如果运算数是奇数,那么它的运算结果就是 x = -(|x| / 2) - 1
3、>>>
>>>无符号右移位,不管正数还是负数,高位都用0补齐(忽略符号位)
1、正数的>>>无符号右移位和>>有符号右移位计算结果相同
2、负数
-5>>>2
1、转化为二进制:
1111 1111 1111 1111 1111 1111 1111 1011
2、整体右移指2位数
0011 1111 1111 1111 1111 1111 1111 1110
3、转化为十进制
1073741822
二进制转化、<<、>>、>>>移位运算的更多相关文章
- JAVA:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题(5)
一.二进制,位运算,移位运算 1.二进制 对于原码, 反码, 补码而言, 需要注意以下几点: (1).Java中没有无符号数, 换言之, Java中的数都是有符号的; (2).二进制的最高位是符号位, ...
- Java学习第五篇:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题
一.二进制,位运算,移位运算 1.二进制 对于原码, 反码, 补码而言, 需要注意以下几点: (1).Java中没有无符号数, 换言之, Java中的数都是有符号的; (2).二进制的最高位是符号位, ...
- java 移位运算
移位运算 :将整数转化为二进制(以补码的形式),按位平移. << 左移 >> 右移 >>> 无符号右移 << 右移: 按位做平 ...
- 【原创】Java移位运算
学习移位运算,首先得知道参与移位运算的类型的位数,那先来复习下Java基础类型的占位数吧. Java基础类型 Java基础类型总结一览表 类型 二进制位数 最大值 最小值 初始化值 表示形式 带符号 ...
- Java中的位运算符、移位运算
一.位运算 Java中有4个位运算,它们的运算规则如下: (1)按位与 (&) :两位全为1,结果为1,否则为0: (2)按位或 (|) :两位有一个为1,结果为1,否则为0: (3) ...
- C语言移位运算
移位运算有两种:>>(右移),<<(左移). a>>b表示将a的二进制值右移b位. a<<b 表示将a的二进制值左移 b位.要求 a和 b都是整型, b ...
- MATLAB的两种移位运算
MATLAB的两种移位运算: 1)circshift矩阵移位 circshift:循环移位数组 语法:B = circshift(A,shiftize) 说明: B = circshift(A,sh ...
- C++ 移位运算与进制转换 浅析
移位运算包括"逻辑移位"(logical shift)和"算术移位"(arithmetic shift). 逻辑移位:移出去的位丢弃,空缺位(vacant bi ...
- Java学习日记基础篇(八) —— 二进制、位运算、位移运算
二进制 二进制是逢2进位的进位置,0,1是基本算符 原码反码补码 在基本数据类型那里,有详细解释 二进制的最高位数是符号位:0表示整数,1表示负数 正数的原码,反码,补码都一样 负数的反码 = 它的原 ...
随机推荐
- 执行js-----Selenium快速入门(十四)
Selenium能够执行js,这使得Selenium拥有更为强大的能力.既然能执行js,那么js能做的事,Selenium应该大部分也能做.这应该得益于JavascriptExecutor这个接口,而 ...
- Win(Phone)10开发第(5)弹,本地媒体服务器的一些注意事项
首先有个wp上的http服务器 http://wphttpserver.codeplex.com/ 使用方式: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...
- UWP开发---通过委托跨页面导航
-前言 做过.Net开发的都了解,当二级窗口操作主窗口的控件时通常用委托的方式.那么在UWP开发中,常常会遇到MainPage的二级Frame里面的内容去操作MainPage的导航跳转,具体看下图: ...
- 从DevOps到Cloud Native,应用上云姿势全解锁
本文由 网易云发布. 作者:林帆 序文 伴随着IaaS.PaaS等云端基础设施技术的成熟,“应用上云”成为许多企业软件部门的心头大事.通过把传统软件系统搬到云上,一方面可以让业务方获得更多的资源灵活 ...
- CEPH 创建 RPM 安装包
1.安装依赖环境 yum install gcc make python-devel openssl-devel graphviz autoconf automake rpm-build redhat ...
- 用navicat远程连接mysql:Can't connect to MySQL server (10060)
出现这种现象的原因有两个,一个是当前用户被mysql服务器拒绝,另外一个原因是3306端口被被防火墙禁掉,无法连接到该端口.解决方法如下: 1.设置远程用户访问权限: // 任何远程主机都可以访问数据 ...
- hdoj1435 Stable Match(稳定婚姻问题)
简单稳定婚姻问题. 题目描述不够全面,当距离相同时容量大的优先选择. 稳定婚姻问题不存在无解情况. #include<iostream> #include<cstring> # ...
- 线程TLAB局部缓存区域(Thread Local Allocation Buffer)
TLAB(Thread Local Allocation Buffer) 1,堆是JVM中所有线程共享的,因此在其上进行对象内存的分配均需要进行加锁,这也导致了new对象的开销是比较大的 2,Sun ...
- 话谈C#第二天
今天做了几个小小的练习,和大家分享一下. 1.用*打印出等腰三角形,代码如下: static void Main(string[] args) { int n = 5; for (int i = 1; ...
- (转)MySQL备份原理详解
MySQL备份原理详解 原文:http://www.cnblogs.com/cchust/p/5452557.html 备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之 ...