- 浏览: 2594466 次
- 来自: 杭州
文章分类
- 全部博客 (1190)
- webwork (4)
- 网摘 (18)
- java (104)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (15)
- 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 (8)
- 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)
最新评论
-
Aqu415:
,默认是netty还是hassion?
dubbo入门 -
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介
各种进制基础知识
- 博客分类:
- 算法
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 571概述 我们在之前的博文中了解到关于 HashMap 和 ... -
BloomFilter——大规模数据处理利器
2016-04-25 15:09 567参考:http://www.cnblogs.com/hea ... -
Base64笔记
2014-05-08 16:32 644原文:http://www.ruanyif ... -
运算符的优先级
2014-02-21 22:06 940很久没有去深究运算符的优先级了,今天写SQL解析思考了一下。 ... -
beansdb使用的压缩算法-Quicklz压缩算法
2014-02-09 20:17 0据这里http://blog.yufeng.i ... -
跳表SkipList的原理和实现
2014-02-07 17:29 985参考:跳表SkipList的原理和实现 -
一种高效无锁内存队列的实现
2014-02-06 10:59 1967原文:http://www.searchtb. ... -
拆分文件统计topN的问题
2014-01-20 18:48 989如果对一个只包含ip地址文件进行统计,需要求出频率最高的前 ... -
Integer的numberOfLeadingZeros方法解释
2014-01-13 20:42 1064int numberOfLeadingZeros(int i ... -
rank排名算法整理
2014-01-07 13:44 10981.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 968原文:http://tech.uc.cn/?p= ... -
统计单词出现频率
2013-10-07 20:58 887这里有一个大文本,文件请从 http://10.125.9 ... -
Reddit评论排名算法
2013-03-16 00:48 1536上一篇文章介绍了Reddit的排名算法,今天继续上一篇文章 ... -
大数据量,海量数据 处理方法总结
2013-01-13 23:46 1101大数据量的问题是很多面试笔试中经常出现的问题,比如bai ... -
STL系列
2013-01-13 23:42 901STL系列之一 deque双向队列 STL系 ... -
java Map排序(按key和按value)
2012-12-10 15:54 93181、按照key排序 对于java中Map的排序,有排序Map ... -
算法文档集合
2012-11-24 15:59 855Treelink算法介绍 一些基础算法介绍 ... -
布隆过滤器
2012-10-23 10:05 1002在日常生活中,包括在设计计算机软件时,我们经常要判断一个元素是 ...
相关推荐
教程名称:计算机二进制转换基础知识课程目录:【】0.课程简介【】1.计算机系统进制概述【】2.十六进制与其它进制的转换【】3.二进制与其它进制的转换【】4.十进制与其它进制的转换【】计算机进制转换二进制、八进制...
二进制基础知识PPT学习教案.pptx
《二进制基础知识》PPT课件.ppt
电子技术
十进制转换二进制的原理与方法:从数学到计算机的基础知识. 十进制转换二进制的原理与方法:从数学到计算机的基础知识. 十进制转换二进制的原理与方法:从数学到计算机的基础知识. 十进制转换二进制的原理与方法 本...
二进制是一种计数系统,使用只有两个数字0和1来表示数值。它是现代计算机和通信系统中最基本的数制。在二进制系统中,每位数字称为一个位(bit),由二进制位串联而成的序列称为二进制数。 在二进制表示中,每个...
C++信息奥赛竞赛篇——二进制
本资源系统地介绍了进制转换的基础知识和应用场景,包括进制的概念、分类、表示、运算、转换等内容,以及进制在计算机、通信、加密等领域的应用和实例。本资源适合数字逻辑学习者和考生使用,帮助他们深入理解和掌握...
二、数制与编码 二、十和十六进制数 各种数制之间的转换 计算机应用基础知识(共59张PPT)全文共59页,当前为第12页。 二、十、十六、八进制数 十进制数 基数为10,逢十进一,有十个数码:0、1、2、3、4、5、6、7、8...
本文主要讲了单片机16进制转10进制数,下面一起来学习一下
内容概要:详细介绍常用进制间互相转换的规则,对于深入了解计算机底层是如何工作的很有帮助。 适合人群:了解计算机基本概念,具有一定编程基础的开发人员。...能学到什么:了解常用进制,各种进制间相互转换的方法。
包括各种进制之间的相互转换知识,还包括一些大家平时容易忽略的Windows计算机基础知识,下载后如果您觉得没有用处可以把计算机基础知识部分清除。
关于计算机基础知识中二进制数的教学设计.pdf
前端基础知识的思维导图和思维导图软件
本文主要讲了单片机二进制转十进制程序代码,希望对你的学习有所帮助。
Python中的整数类型可以分为...在Python中写入二进制、八进制和十六进制按回车键后都会默认输出为十进制。 >>> 0xabcdef #十六进制 11259375 >>> 0b1011001 #二进制 89 >>> 0o5674 #八进制 3004 >>> 4545 #十进制 4545
主要介绍了一些java二进制的相关基础知识,在Java语言中byte代表最小计量单位,byte由8位2进制数组成。,需要的朋友可以参考下
关于二、八、十、十六进制之间的转换
进制转换基础知识:介绍不同进制数的表示方法和特点,以及进制转换的基本原理。 自定义进制转换函数:介绍如何编写自定义的进制转换函数,包括将十进制数转换为其他进制数,以及将其他进制数转换为十进制数的方法。 ...