位运算: 如何用移位运算实现乘法操作

解析:

把一个数向左移动n位相当于把该数乘以2的n次方,因此当乘法运算中的某个数字满足这个特点时,就可以用移位操作来代替乘法操作,从而提高效率

示例如下:

public class Muti{
    public static int powerN (int m, int n){
        for(int i=0; i<n; i++)
            m=m<<1;
        return m;

}

public static void main(String[] args){
         System.out.println("3 乘以 8 = " + powerN(3, 3));
         System.out.println("3 乘以 16 = " + powerN(3, 4));

}
}

时间: 2024-10-23 06:49:01

位运算: 如何用移位运算实现乘法操作的相关文章

逻辑运算与移位运算

一.布尔代数:简单理解就是用数字0和1(即:二进制位)代表逻辑值真和假来进行逻辑推理基本原则的研究.是逻辑电路和逻辑运算的数学基础. 二.逻辑运算符:与.或.非.异或 一元运算符:非(NOT),只有一个操作数 二元运算符:与(AND).或(OR)和异或(XOR),有两个操作数 逻辑运算符真值表 NOT:对于输入x取反即可 AND:对于输入x和y只有都为1是x&y才为1,否则都为0,如果能确定第一个操作数是0,则无需计算第二个操作数,结果必然为0 OR:表示结果不是x就是y,两者二选一.对于操作数

java 移位运算

版权声明:转载请注明出处:http://www.cnblogs.com/lkcc/ 请读者亲自试一试代码,以免文章有误而误解. 移位运算 :将整数转化为二进制(以补码的形式),按位平移. <<     左移 >>     右移 >>>   无符号右移 << 右移: 按位做平移,末位用0补上(正负数都一样) a << n; 如果 a 是  byte.short.int 类型 那么 a << n 就是  a << (n%

C++ 移位运算与进制转换 浅析

移位运算包括"逻辑移位"(logical shift)和"算术移位"(arithmetic shift). 逻辑移位:移出去的位丢弃,空缺位(vacant bit)用 0 填充. 算术移位:移出去的位丢弃,空缺位(vacant bit)用"符号位"来填充,所以一般用在右移运算中. c++中,整数分有符号数和无符号数两种.对于这两种数做左移.右移运算.稍有差别: 1.假设是无符号数,无论是左移还是右移都是"逻辑移位" .例,对无

&lt;&lt; 移位运算

/** * The maximum capacity, used if a higher value is implicitly specified * by either of the constructors with arguments. * MUST be a power of two <= 1<<30. */ static final int MAXIMUM_CAPACITY = 1 << 30; 为什么用移位运算? 1. 得到的一定是偶数 2. 简洁 (上面例子中

C++ 移位运算 浅析

移位运算包含"逻辑移位"(logical shift)和"算术移位"(arithmetic shift). 逻辑移位:移出去的位丢弃,空缺位(vacant bit)用 0 填充. 算术移位:移出去的位丢弃,空缺位(vacant bit)用"符号位"来填充,所以一般用在右移运算中. c++中,整数分有符号数和无符号数两种,对于这两种数做左移.右移运算,稍有区别: 1.如果是无符号数,不管是左移还是右移都是"逻辑移位" .例,对无

大端/小端,高字节/低字节,高地址/低地址,移位运算

其实大端小端的概念比较好理解的,大端:数据的高字节存放在内存的低地址中. 数组的声明方式是从左往右,地址逐渐增大. int8_t a[] = { 1, 2, 3 }; for (int i = 0; i < 3; i++) printf("a[%d]: %p\n", i, &a[i]); a[0]: 0x7ffce52cf290 a[1]: 0x7ffce52cf294 a[2]: 0x7ffce52cf298 int8_t是<stdint.h>定义的跨平台数

关于对移位运算的理解

之前在<计算机组成原理>这门课中学习了很多,其中包括二进制数的移位运算.当时并不理解他们用来作甚,迷迷糊糊的状态,学了都不知道为什么要学.什么东西总是到了需要用到的时候,才明白,哦,原来乳齿啊!以下是我在java编程中对移位运算的理解和总结: 在Java语言中,二进制数使用补码表示,最高位为符号位,正数的符号位为0,负数为1.补码的表示需要满足如下要求. (1)正数的最高位为0,其余各位代表数值本身(二进制数). (2)对于负数,通过对该数绝对值的补码按位取反,再对整个数加1. 一.算术移位:

C#运算符之与,或,异或及移位运算

1.剖析异或运算(^) 二元 ^ 运算符是为整型和 bool 类型预定义的.对于整型,^ 将计算操作数的按位“异或”.对于 bool 操作数,^ 将计算操作数的逻辑“异或”:也就是说,当且仅当只有一个操作数为 true 时,结果才为 true. 数值运算举例 按位异或的3个特点:(1) 0^0=0,0^1=1  0异或任何数=任何数(2) 1^0=1,1^1=0  1异或任何数-任何数取反(3) 1^1=0,0^0=0  任何数异或自己=把自己置0 例如:10100001^00010001=10

【原创】Java移位运算

学习移位运算,首先得知道参与移位运算的类型的位数,那先来复习下Java基础类型的占位数吧. Java基础类型 Java基础类型总结一览表 类型 二进制位数 最大值 最小值 初始化值 表示形式 带符号 char 8 127(2^7-1) -128(-2^7) 0 二进制补码 是 short 16 32767(2^15 - 1) -32768(-2^15) 0 二进制补码 是 int 32 2,147,485,647(2^31 - 1) -2,147,483,648(-2^31) 0 二进制补码 l