二进制基础

进制转换

十进制数字57转换为二进制方法:

用二进制表示57则为(按权展开):111001=2^(6-1)+2^(5-1)+2^(4-1)+2^(1-1)=32+16+8+1=57
![十进制换算二进制][2]
换算为二进制采用短除2
除法 商 余数
2|5 2 1
2|1 0 1
直到商为0,再将余数倒序排列
![常用进制的换算][3]
![适合计算机的进制8、16都是2的整数次方,所以常用。][4]
![二进制 8进制:适用于12和36位的计算机系统][5]
![二进制][6]
![常用进制的换算][7]
![二进制转十进制][8]

位运算

按位与 &: 同为1,为1 作用:清零、指定位求反
按位或 |: 同为0,才为0 作用:清零、指定位求反
按位异或 ^:相同,则为0 作用:清零 、做中间变量
正数:原码=补码=反玛;
负数:反码=^原码,补码=反码+1;
@二进制基础——位运算
一、异或作用
1、对某个数定位翻转:0^0=0 1^0=1 0^1=1 1^1=0
· 翻转位异或1
· 不翻转位异或0
2、两个变量值交换:A=A^B;B=A^B;A=A^B(条件:A!=B)
二、左右移
1、左移<< :左丢弃,右补0,但注意整形为32位
2、右移>> :右丢弃,左补0(整数)或者1(负数)
3、无符号右移>>> : 右丢弃,左补0
![负数以其正值的补码形式表示(1/2)原码反码补码][9]
![左移(<<)运算][10]
![右移(>>)运算][11]
![无符号右移(>>>)运算][12]
![二进制位运算][13]
(一)按位与&
特殊运输
(1)清零,如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都是零的数值相与,结果为零。
(2)取一个数中指定位:找一个数,对应x要取的位,该数的对应位为1,其余位为零,此数与x进行“与运算”可以得到x中的指定为
(二)按位或|
特殊用法
常用来对一个数据的某些位置1:找到一个数,对应x要置1的位,该数的对应位为1,其余位为零。此数与x相或可使x中的某些位置1。
(三)异或^
特殊用法
(1)使特定位翻转:特定位异或1
(2)与0相异或,保留原值
(3)两个变量交换值
1.借助第三个变量来实现
2.利用加减法实现两个变量的交换
A=A+B;B=A-B;B=A=B
3.异或运算
一个数异或本身等于0和异或运算符合交换律
A=A^B;B=A^B;A=A^B
(四)取反与运算~
对一个二进制数按位取反,即将0变为1,1变0
(五)左移<<
将一个运算对象的各二进制位全部左移若干位,
(六)右移>>
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。操作数每右移一位,相当于该数除以2
(七)无符号右移运算>>>
各个位向右移指定的位数。右移后左边空出的位用零来填充。移除右边的位被丢弃。

负数以其正数的补码形式表示
反码加1称为补码
32位整数,最高位为1,就是负数
负数 左移或者右移
![负数以其正值的补码形式表示(2/2)][14]
按位与&:两位全为1,结果位才为1
(清零、取一个数中的指定位)
|:两位只要有一个位为1,结果位就为1
(将一个数的某些位置1)
^:两位相异则该位结果为1,否则为0
![异或(^)运算 (续上)][15]
1.二进制位运算:

(1)且运算,1 & 1 = 1, 0 & 1 = 0;

(2)或运算,1 & 0 = 1

(3)异或运算,1 ^ 1 = 0,1 ^ 0 = 1; 两个位的值不同,则结果为1,相同结果为0.
(4)<<左移运算符,还有看看是否有符号位。
(5)>>右移运算符,还要看看是否有符号位。
(6)~按位取反, ~1 = 0, ~0 = 1
(7)>>>无符号右移运算符,二进制各个位向右移指定的位数,右移后左边空出来的位用零来填充,移出右边的位被丢弃。
(8)<<<无符号左移运算符,二进制各个位向左移指定的位数,左移后右边空出来的位用零来填充,移出左边的位被丢弃。
【位运算的作用:(1)清零 (2)取一个数中指定位】
2.原码,反码(对原码的每一个二进制位取反),补码 = 反码 + 1。

JDK内置的进制转换

![Java中内置的进制转换方法][16]
@二进制——JDK内置的进制转换
static int parseInt(String s) 将字符串参数作为有符号的十进制整数进行分析。
static Integer valueOf(int i) 返回一个表示指定的 int 值的 Integer 实例。
parseInt(“1011001”,2) 含义为将二进制转为十进制。同样可以用parseInt(“45”,8)来讲八进制数45 转为十进制。调用方法为: Integer.parseInt(…)
![此处输入图片的描述][17]
java内置的进制转换

Integer.parseInt(“0100101”,2);//二进制转换为十进制
Integer.parseInt(“23”,8);//八进制转换为十进制
Integer.parseInt(“A2”,16);//十六进制转换为十进制

java中的进制

位运算
Integer.toBinaryString(112) //二进制
Integer.toHexString(112) //十六进制
Integer.toOctalString(112) //八进制
Integer.parseInt("111001",2)//二进制数111001转换成十进制数http://blog.csdn.net/iukey/article/details/7195265
http://blog.csdn.net/zhaoshuzhaoshu/article/details/37600857public static byte[] int2Bytes(int id) {
byte[] arr = new byte[4];
for (int i = 0; i < arr.length; i++) {
arr[i] = (byte) ((int) (id >> i * 8) & 0xff);
}
return arr;
}public static int byte2Int(byte[] arr) {
int result = 0;
for (int i = 0; i < arr.length; i++) {
result += (int) ((arr[i] & 0xff) << i * 8);
}
return result;

位运算的几个应用:
1) 判断int型变量a是奇数还是偶数
a&1 = 0 偶数
a&1 = 1 奇数
2) 取int型变量a的第k位 (k=0,1,2……sizeof(int)),即a>>k&1 (先右移再与1)
3) 将int型变量a的第k位清0,即a=a&~( 1 < < k) (10000 取反后为00001 )
4) 将int型变量a的第k位置1,即a=a|(1<< k)
5) int型变量循环左移k次,即a=a<< k|a>>16-k (设sizeof(int)=16)
6) int型变量a循环右移k次,即a=a>>k|a<<16-k (设sizeof(int)=16)
7)对于一个数 x >= 0,判断是不是2的幂。
boolean power2(int x){return ( (x&(x-1))==0) && (x!=0);}
(8)不用temp交换两个整数
void swap(int x , int y)
{x ^= y;y ^= x;x ^= y;}
(9)计算绝对值
int abs( int x ){int y ;y = x >> 31 ;
return (x^y)-y ; //or: (x+y)^y
}
10)取模运算转化成位运算 (在不产生溢出的情况下)
a % (2^n) 等价于 a & (2^n - 1)
11)乘法运算转化成位运算 (在不产生溢出的情况下)
a * (2^n) 等价于 a<< n
12)除法运算转化成位运算 (在不产生溢出的情况下)
a / (2^n) 等价于 a>> n
例: 12/8 == 12>>3
13) a % 2 等价于 a & 1
14) if (x == a)
x= b;
else x= a;
等价于 x= a ^ b ^ x;
15) x 的 相反数 表示为 (~x+1)
16)输入2的n次方:1 << 19
17)乘除2的倍数:千万不要用乘除法,非常拖效率。只要知道左移1位就是乘以2,右移1位就是除以2就行了。比如要算25 * 4,用25 << 2就好啦

![基本数据类型][18]
Java中的数据类型:
一、四种基本类型:
1、int类型:
1.1、byte(Byte):8bit;
1.2、short(Short):16bit;
1.3、int(Integer):32bit;
1.4、long(Long):64bit;
2、float类型:
2.1、单精度:float(Float),32bit;
2.2、双精度:double(Double),64bit;
3、boolean(Boolean)类型:取值true或false;
4、char(Character)类型:Unicode字符,16bit;

注:括号中为该类型对应的类类型!
![大小端][19]
![大小端(2/2)][20]
![字符串与字节的转化][21]
在服务器客户端模型中, 客户端使用java,发送serializable参数,服务器de-serializable。
C作为更加底层的语言,服务器若使用c会更具效率,但无法做到de-serializable,因此改为由客户端发出0,1表示的二进制参数。因此也就用到了java中二进制,位操作的内容。

编程基础 二进制 解密相关推荐

  1. Java的编程基础-----Java中二进制与十进制的转换

    Java的编程基础-----Java中二进制与十进制的转换 文章目录

  2. Java网络编程和NIO详解开篇:Java网络编程基础

    老曹眼中的网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为我们拥有网络.网络是一个神奇的东西,它改变了你和我的 ...

  3. Java 网络编程基础知识

    Java 网络编程基础知识 基础概念 计算机网络的基本概念 ​ 网络:多台计算机使用网络设备互联在一起,计算机之间可以进行通信,这样就组成了一个计算机网络. ​ 网络设备:集线器(HUB),路由器,交 ...

  4. 基于openEuler的OpenSSL编译安装和编程基础

    文章目录 基于openEuler的OpenSSL编译安装和编程基础 OpenSSL编译安装 OpenSSL命令的使用 OpenSSL编程 简单测试 BASE64算法 作业 参考资料 基于openEul ...

  5. c语言职专试题及答案,中等职业学校计算机应用专业c语言编程基础科试卷及答案.doc...

    中等职业学校计算机应用专业c语言编程基础科试卷及答案.doc 中等职业学校计算机应用专业C语言编程基础科试卷及答案一.填空(共35分)1.Unix系统诞生于 年,是由 实验室的K和用汇编语言开发成功的 ...

  6. python 科学计算基础教程电子版-自学Python 编程基础、科学计算及数据分析

    自学Python 编程基础.科学计算及数据分析 epub pdf mobi txt 下载 自学Python 编程基础.科学计算及数据分析 epub pdf mobi txt 下载 ☆☆☆☆☆ 李金 著 ...

  7. Linux Shell编程基础

    linux系统下给命令指定别名alias命令用法: 在linux系统中如果命令太长又不符合用户的习惯,那么我们可以为它指定一个别名.虽然可以为命令建立"链接"解决长文件名的问题,但 ...

  8. 【不会吧不会吧,不会有人真的三分钟入门Python了吧?】Python编程基础

    python编程基础 变量 字符串 字符串是Python中最常用的数据类型.我们可以使用引号('或者")来创建字符串. string = 'hello world.' name = &quo ...

  9. 网络编程基础之C/S架构和TCP/IP协议

    一.何谓C/S架构 C指的是client(客户端软件),S指的是Server(服务端软件),既然我们的的标题是网络编程基础, 那我们就一起来学习怎样写一个C/S架构的软件,实现服务端与客户端软件基于网 ...

最新文章

  1. 如何让机器像人一样多角度思考?协同训练来帮你
  2. 英文语句处理(空格处理)
  3. Python 学习笔记 -- 序列的基本使用
  4. Elasticsearch 如何把SQL转换为DSL
  5. java 队列已满_java – ThreadPoolExecutor当队列已满时阻塞?
  6. URI和URL的区别(12万访问量)
  7. python怎么创建虚拟环境_anaconda怎么创建python虚拟环境
  8. C#比较运算符及解析
  9. Windows Phone 用WebBrowser加载HTML页面
  10. iframe高度自适应的6个方法
  11. Effective Java学习笔记之第6条 消除过期的引用对象
  12. 【业务建模_5】数据分析师技能梳理
  13. tomcat7 IP限制配置
  14. 修改mysql的authen_MySQL数据库出现Authentication plugin怎么办
  15. 相机视场角和焦距_相机视场角估计
  16. trainlm算法c语言,粒子群优化的BP神经网络模型对C、Mn两种元素收得率的预测
  17. 计算机系统结构——量化研究方法(第三版)
  18. vscode下载和前端工程师常用的20+插件,包含代码提示、语法高亮、括号颜色等等
  19. iOS横屏电子签名上篇【核心原理: 旋转特定的屏幕 Quartz2D】应用场景:采集电子签名,支持签名界面为横屏其余页面都是竖屏、清除重写、灵活控制提示语信息、以及查看商户协议等
  20. Coursera吴恩达《优化深度神经网络》课程笔记(3)-- 超参数调试、Batch正则化和编程框架

热门文章

  1. 计算机在3d打印发挥的作用,七大优势汇总 看3D打印的路到底能走多远
  2. 【大学物理】刚体的定轴转动 记忆方法
  3. 微信电脑版字体模糊(或文字太小)怎么调整
  4. Rapid Object Detection using a Boosted Cascade of Simple Features
  5. SAP-FICO LSMW批量导财务凭证批量导固定资产主数据-AS91
  6. PMP考试计算题汇总
  7. 【android:位置传感器——使用近程传感器】
  8. 人民币(¥)符号在html中的显示
  9. 京东联盟开发(11)——商品类目(2级)
  10. SQL多表查询:左外连接、右外连接、满外连接、UNION ALL