深入理解位移

一个很简单问题:用什么方式计算2*8最高效?

没错答案,就是2<<3,你肯定也是知道答案的。

但为什么是2<<3不是2<<2也不是2<<4呢?

估计有不少人就发懵了。

以下就来讲解一下位运算中的左移右移。

先看一下在10进制中对数字进行左右移操作:

目标数字:1

左移1位:10

左移2位:100

右移1位:0.1

右移2位:0.01

很明显,一个10进制的数左移多少位就乘以10的多少次方,右移多少位就除以10的多少次方。

再看一下2进制中对数字进行左右移操作:

目标数字:1

左移1位:10

左移2位:100

右移1位:0.1

右移2位:0.01

看到没有,其实是和10进制是一样的,只不过同样的位移因为不同的进制导致数值的不同。

很明显,一个2进制的数左移多少位就乘以2的多少次方,右移多少位就除以2的多少次方。

根据以上规律可得出:

在r进制中,一个数a左移b位,就等于a乘以r的b次方,公式:a << b=a*(r^b)。

在r进制中,一个数a乘以另一个数b,等于a左移b开r方根的次数(以r为底的b的对数 ),公式:a*b=a<< *log*r(b)。

在r进制中,一个数a右移b位,就等于a除以r的b次方,公式:a >> b=a/(r^b)。

在r进制中,一个数a除以另一个数b,等于a右移b开r方根的次数(以r为底的b的对数 ),公式:a/b=a>>*log*r(b)。

现在请看2*8,因为a * b=a<< *log*r(b),所以2乘以8等于2左移3(3=8开2次方根)。

时间: 2024-10-28 14:36:24

深入理解位移的相关文章

理解HTC Vive更新——控制相机旋转和位移

本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/72188658 作者:cartzhang 一.写在前面 在HTC的vive 头盔中, 一旦Vive头盔连接都unity游戏中,就会控制所有Camera的旋转和位置. 这对于有需要的控制非头盔相机带来了烦恼. 比方说,上篇博客中,在VR中,对某个特点位置截图,就会由于头盔控制所有相机的旋转, 造成截图不精确和出现偏移. 地址:

理解CSS3 transform中的Matrix(矩阵)

一.哥,我被你吓住了 打架的时候会被块头大的吓住,学习的时候会被奇怪名字吓住(如“拉普拉斯不等式”).这与情感化设计本质一致:界面设计好会让人觉得这个软件好用! 所以,当看到上面“Matrix(矩阵)”的时候,难免会心生畏惧(即使你已经学过),正常心理.实际上,这玩意确实有点复杂. 然而,这却是屌丝逆袭的一个好机会. CSS同行间:你是不是有这样的感觉:哎呀呀,每天就是对着设计图切页面,貌似技术没有得到实质性地提升啊,或者觉得日后高度有限! 我们应该都知道二八法则(巴莱多定律),即任何一组东西中

深入理解css网页布局细节

在CSS网页开发布局中,需要对浮动和定位有深刻的理解才能在开发中游刃有余. 基于此,在博客园中做了本篇总结,这些总结来自实践经验和阅读一些书籍后的理解总结,主要内容为浮动,清除浮动,定位. 一. float属性深入理解 首先简单布局一下,代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>css Test</title> <sty

深入理解计算机系统之程序的机器级表示部分学习笔记

不论我们是在用C语言还是用JAVA或是其他的语言编程时,我们会被屏蔽了程序的机器级的实现.机器语言不需要被编译,可以直接被CPU执行,其执行速度十分  快.但是机器语言的读写性与移植性较高级语言低.高级语言被编译后便成为了汇编语言,汇编语言十分接近机器语言.之后汇编代码会转化为机器语言.虽然现代  的编译器能帮助我们将高级语言转化为汇编语言,解决了不少问题,但是对于一个严谨的程序员来说,需要做到能够阅读和理解汇编语言.我们主要围绕Intel来讲  解. 一  Intel处理器的历史演变 Inte

深入理解JVM读书笔记: Class类文件结构

Class文件是一组以8位字节为基础单位的二进制流.采用一种类似于C语言结构体的微结构来存储数据,只有两种数据类型:无符号数和表.其中无符号数数据基本的数据类型,以u1.u2.u4.u8表示1.2.4.8字节的无符号数,用于描述数字.索引引用.数量值或者UTF-8编码字符串:表则是由无符号树和其他表的复合数据类型,以_info后缀.整个Class文件本质上就是一张表: 解析Class文件各个数据项含义: 魔数 头4个字节为魔数Magic Number,唯一作用是识别文件是否能被虚拟机接受. 版本

深入理解计算机系统(CSAPP)实验二 datalab-handout

实验的目的是 填写 bits.c里面的函数,使其按照规定的要求(比如只能使用有限且规定的操作符和数据类型,不能使用控制语句等等)实现函数的功能. 同时 dlc文件是用来检测 bits.c 里面的函数是否  是按照要求编写的,有没有使用非法的数据类型等. 使用方法:./dlc bits.c 检测成功后,使用 btest 测试 每一个函数功能方面是否正确无误.使用方法:./btest,如果某个函数错误,会显示错误的数据,以及正确的数据. 完整的bits.c如下.也是参考网上各路大神的. /* * C

[转载] 快速理解Kafka分布式消息队列框架

转载自http://blog.csdn.net/xiaolang85/article/details/18048631 ==是什么 == 简单的说,Kafka是由Linkedin开发的一个分布式的消息队列系统(Message Queue) 目标Scope(解决什么问题) kafka开发的主要初衷目标是构建一个用来处理海量日志,用户行为和网站运营统计等的数据处理框架.在结合了数据挖掘,行为分析,运营监控等需求的情况下,需要能够满足各种实时在线和批量离线处理应用场合对低延迟和批量吞吐性能的要求.从需

图像处理-傅里叶变换的理解

大部分复制参考链接: http://blog.csdn.net/kofsky/article/details/2955823 1.实质:傅里叶变换就是将一个时域信号映射到频域的一种方法. 有的信号主要在时域表现其特性,如 电容充放电的过程: 而有的信号则主要在频域表现其特性,如 机械的振动,人类的语音等. 若信号的特征主要在频域表示的话,则相应的时域信号看起来可能杂乱无章,但在频域则解读非常方便.所以需采取傅里叶变换进行分析. 冈萨雷斯版<图像处理>里面的解释非常形象:一个恰当的比喻是将傅里叶

深入理解java虚拟机-第六章

第6章 类文件 6.3 Class类文件的结构 Class文件是一组以8位字节为基础单位的二进制流. Class文件格式采用一种类似C语言结构伪结构存储数据,这种伪结构中只有两种数据类型:无符号数和表 无符号数属于基本的数据类型以u1,u2,u4,u8来分别代表一个字节.2个字节,4个字节.8个字节的无符号数,无符号数可以用来描述数字.索引引用.数量值或者按照UTF-8编码构成字条串值. 表是由多个无符号数或者其他表作为数据项构成的复合数据类型,所有表习惯性地以 _info 结尾. 表 Clas