- 浏览: 2651653 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
10进制是人类最熟悉的数字计算
2进制是机器最基本的单位
16进制呢?是为了方便表示最基本的数据传输单位字节,因为一个字节8位,16进制2位就能轻松表示1个字节。
比如 15
16进制:print 0x0F
2进制:print 0b1111
255
16进制:print 0xFF
2进制:print 0b11111111
如何把一个数字转换成字节数组?
以10001为例:
i = 10001
bin(i):
'0b10011100010001'
int两个字节表示:
- 高位:100111
- 低位:00010001
获取高位的值:big = i>>8 //位移8位
获取低位的值:little = (byte)i17 //强制转换成byte会丢弃超过byte范围的高位值
decode:
result = big<<8 | little
print result
这里解释一下:
要了解移位运算,需明白二进制计数 以单字节为例,比如0x55=0b01010101 如果将该数值左移1位,就变成了 0b10101010(最右边这个0是移空了以后补的),这个数值是0xaa 从数学上看,左移1位等于乘以2,右移1位等于除以2,然后再取整,移位溢出的丢弃。
全部代码:
public class BruteForceCoding { private final static int BSIZE = Byte.SIZE / Byte.SIZE; // 1 private final static int SSIZE = Short.SIZE / Byte.SIZE; // 2 private final static int ISIZE = Integer.SIZE / Byte.SIZE; // 4 private final static int LSIZE = Long.SIZE / Byte.SIZE; // 8 private final static int BYTEMASK = 0xFF; // 8 bits public static String byteArrayToDecimalString(byte[] bArray) { StringBuilder rtn = new StringBuilder(); for (byte b : bArray) { rtn.append(b & BYTEMASK).append(" "); } return rtn.toString(); } // Warning: Untested preconditions (e.g., 0 <= size <= 8) public static int encodeIntBigEndian(byte[] dst, long val, int offset, int size) { for (int i = 0; i < size; i++) { dst[offset++] = (byte) (val >> ((size - i - 1) * Byte.SIZE)); } return offset; } // Warning: Untested preconditions (e.g., 0 <= size <= 8) public static long decodeIntBigEndian(byte[] val, int offset, int size) { long rtn = 0; for (int i = 0; i < size; i++) { rtn = (rtn << Byte.SIZE) | ((long) val[offset + i] & BYTEMASK); } return rtn; } public static void main(String[] args) { // System.out.println(Long.toBinaryString(10001)); // System.out.println(Long.toBinaryString(17)); // System.out.println((byte) 10001); byte byteVal = 101; // one hundred and one short shortVal = 10001; // ten thousand and one int intVal = 100000001; // one hundred million and one long longVal = 1000000000001L; // one trillion and one byte[] message = new byte[BSIZE + SSIZE + ISIZE + LSIZE]; // Encode the fields in the target byte array int offset = encodeIntBigEndian(message, byteVal, 0, BSIZE); offset = encodeIntBigEndian(message, shortVal, offset, SSIZE); offset = encodeIntBigEndian(message, intVal, offset, ISIZE); encodeIntBigEndian(message, longVal, offset, LSIZE); System.out.println("Encoded message: " + byteArrayToDecimalString(message)); // Decode several fields long value = decodeIntBigEndian(message, BSIZE, SSIZE); System.out.println("Decoded short = " + value); value = decodeIntBigEndian(message, BSIZE + SSIZE + ISIZE, LSIZE); System.out.println("Decoded long = " + value); // Demonstrate dangers of conversion offset = 4; value = decodeIntBigEndian(message, offset, BSIZE); System.out.println("Decoded value (offset " + offset + ", size " + BSIZE + ") = " + value); byte bVal = (byte) decodeIntBigEndian(message, offset, BSIZE); System.out.println("Same value as byte = " + bVal); //10001 } }
简单解释一下:
byteArrayToDecimalString():
该方法把给定数组中的每个字节作为一个无符号十进制数打印出来。BYTEMASK 的作用是防止在字节数值转换成 int 类型时,发生符号扩展(sign-extended),即转换成无符号整型。
encodeIntBigEndian():
赋值语句的右边,首先将数值向右移动,以使我们需要的字节处于该数值的低 8 位中。然后,将移位后的数转换成 byte 型,并存入字节数组的适当位置。在转换过程中,除了低 8位以外,其他位都将丢弃。这个过程将根据给定数值所占字节数迭代进行。该方法还将返回存入数值后字节数组中新的偏移位置,因此我们不必做额外的工作来跟踪偏移量。
decodeIntBigEndian():
根据给定数组的字节大小进行迭代,通过每次迭代的左移操作,将所取得字节的值累积到一个 long 型整数中。
发表评论
-
ConcurrentHashMap 的实现原理
2016-06-12 15:37 608概述 我们在之前的博文中了解到关于 HashMap 和 ... -
BloomFilter——大规模数据处理利器
2016-04-25 15:09 595参考:http://www.cnblogs.com/hea ... -
Base64笔记
2014-05-08 16:32 678原文:http://www.ruanyif ... -
运算符的优先级
2014-02-21 22:06 973很久没有去深究运算符的优先级了,今天写SQL解析思考了一下。 ... -
beansdb使用的压缩算法-Quicklz压缩算法
2014-02-09 20:17 0据这里http://blog.yufeng.i ... -
跳表SkipList的原理和实现
2014-02-07 17:29 1009参考:跳表SkipList的原理和实现 -
一种高效无锁内存队列的实现
2014-02-06 10:59 2013原文:http://www.searchtb. ... -
拆分文件统计topN的问题
2014-01-20 18:48 1040如果对一个只包含ip地址文件进行统计,需要求出频率最高的前 ... -
Integer的numberOfLeadingZeros方法解释
2014-01-13 20:42 1146int numberOfLeadingZeros(int i ... -
rank排名算法整理
2014-01-07 13:44 11501.Delicious.com 热门书签排行榜 按照&q ... -
利用switch判断各种case
2013-12-27 16:35 0String env = "daily" ... -
如何创建一个短链服务
2013-12-26 16:23 0参考: http://stackoverflow.com ... -
HAProxy的独门武器:ebtree
2013-12-07 18:57 995原文:http://tech.uc.cn/?p= ... -
统计单词出现频率
2013-10-07 20:58 928这里有一个大文本,文件请从 http://10.125.9 ... -
Reddit评论排名算法
2013-03-16 00:48 1635上一篇文章介绍了Reddit的排名算法,今天继续上一篇文章 ... -
大数据量,海量数据 处理方法总结
2013-01-13 23:46 1160大数据量的问题是很多面试笔试中经常出现的问题,比如bai ... -
STL系列
2013-01-13 23:42 959STL系列之一 deque双向队列 STL系 ... -
java Map排序(按key和按value)
2012-12-10 15:54 94641、按照key排序 对于java中Map的排序,有排序Map ... -
算法文档集合
2012-11-24 15:59 905Treelink算法介绍 一些基础算法介绍 ... -
布隆过滤器
2012-10-23 10:05 1067在日常生活中,包括在设计计算机软件时,我们经常要判断一个元素是 ...
相关推荐
教程名称:计算机二进制转换基础知识课程目录:【】0.课程简介【】1.计算机系统进制概述【】2.十六进制与其它进制的转换【】3.二进制与其它进制的转换【】4.十进制与其它进制的转换【】计算机进制转换二进制、八进制...
计算机中的各种数制与进位计数制、各进制之间的相互转化、计算机中数据及编码、二进制数的计算机内部表示方法、二进制的算术、逻辑运算等都是二进制基础知识的重要组成部分。 计算机中的各种数制与进位计数制 ...
二进制基础知识 二进制基础知识是计算机科学中最基本的概念之一。计算机中的各种数制与进位计数制是计算机内部描述各种信息的一种方法。了解二进制基础知识对于计算机科学的研究和应用至关重要。 一、计算机中的...
计算机中的进制转换是数字系统基础的重要组成部分,尤其在编程、计算和数据存储等领域中扮演着关键角色。这里我们将详细探讨各个题目所涉及的进制...通过理解和掌握这些知识点,可以有效地解决各种进制转换的练习题。
#### 一、二进制与十六进制基础知识 **1.1 二进制简介** 二进制是基于2的基数系统,只包含两个数字:0 和 1。在计算机科学中,二进制是最基本的表示形式,因为计算机硬件的基础单元(比特)只能处于两种状态:开或...
下面我们将深入探讨这个“各种进制的计算器”所涉及的关键知识点。 首先,我们来关注二进制系统。二进制(Binary)是基于0和1两个数字的计算系统,它是计算机内部处理和存储所有信息的基础。在二进制中,每一位的...
### 数字各种进制的转换 #### 知识点概览 本文将详细介绍不同数字进制之间的转换方法,包括二进制、八进制、十进制与十六进制等常见进制之间的相互转换。通过具体的算法实现和实例分析,帮助读者深入理解进制转换...
理解这些基础知识可以帮助我们更好地理解转换过程。 对于更复杂的场景,比如解析二进制数据流或处理位运算,C#提供了一些其他工具,如`BitConverter`类,它可以将基本类型转换为字节数组,反之亦然。这在处理二进制...
进制转换是计算机科学中的基础概念,涉及到二进制、八进制、十进制、十六进制等不同计数系统间的转换。这些不同的进制系统在编程、数据存储、硬件设计等多个领域都有广泛的应用。下面将详细阐述各种进制之间的相互...
结合以上知识,我们可以创建一个简单的进制转换工具类,包含各种进制间的转换方法。以下是一个简化的示例: ```csharp public static class ConversionHelper { public static string DecimalToBinary(int decimal...
各种进制的转换(计算机基础) 计算机技术中,数据的表示形式有多种,包括二进制、八...我们可以看到,各种进制之间的转换是计算机技术的基础知识之一。只有掌握了这些转换方法,我们才能更好地理解和应用计算机技术。
在IT领域,进制转换是一项基础且重要的技能,特别是在编程中。...无论是简单的命令行工具还是复杂的Web应用,这些基础知识都将派上用场。通过实践和测试,你可以构建出一个功能完备且可靠的进制转换计算器。
计算机各种进制转换练习题 计算机各种进制转换是计算机科学中的基本概念,...计算机各种进制转换是计算机科学中的基础知识,本文通过练习题的形式总结了计算机各种进制转换的知识点,并提供了答案供读者学习和参考。
电子技术
计算机各种进制转换练习题 计算机各种进制转换是计算机科学中的一种基本概念,涉及到数字系统、计算机系统、软件开发等领域。下面是计算机各种进制转换练习...理解不同进制之间的转换关系是计算机科学的基础知识之一。
在IT领域,进制转换是基础且至关重要的概念,它涉及到计算机系统中数据表示和处理的方式。本资源“190930-各种进制转换.zip”显然是一份关于不同进制之间转换的教程或代码集合,主要涵盖以下几个方面: 1. **十进制...
在IT领域,进制转换是基础且至关重要的概念,它涉及到二进制、八进制、十进制和十六进制等不同数制之间的转换。字符转换则涉及到ASCII码、Unicode编码等,这些在处理文本数据时尤为重要。而子网划分则是网络管理中的...
1. **进制转换基础知识** - **二进制**:二进制系统仅包含两个符号0和1,它是计算机内部存储和处理数据的基础。所有计算机指令和数据都以二进制形式表示。 - **八进制**:八进制系统使用0-7这八个数字,常用于早期...
十进制转换二进制的原理与方法:从数学到计算机的基础知识. 十进制转换二进制的原理与方法:从数学到计算机的基础知识. 十进制转换二进制的原理与方法:从数学到计算机的基础知识. 十进制转换二进制的原理与方法 本...
在计算机科学中,数字的表示方法是至关重要...例如,在处理计算机内存地址、网络IP地址、颜色编码或硬件配置时,都需要用到这些基础知识。因此,无论是初学者还是经验丰富的开发者,都应该熟悉和精通这些进制转换方法。