C#移位运算(左移和右移)

C#是用<<(左移) 和 >>(右移) 运算符是用来执行移位运算。
左移 (<<):将第一个操作数向左移动第二个操作数指定的位数,空出的位置补0。
左移相当于乘. 左移一位相当于乘2;左移两位相当于乘4;左移三位相当于乘8。

 x<<1= x*2
 x<<2= x*4
 x<<3= x*8
 x<<4= x*16

同理, 右移即相反:
右移 (>>):将第一个操作数向右移动第二个操作数所指定的位数,空出的位置补0。
右移相当于整除. 右移一位相当于除以2;右移两位相当于除以4;右移三位相当于除以8。

 x>>1= x/2
 x>>2= x/4
 x>>3= x/8
 x>>4=x/16

因为位移比乘除速度快.对效率要求高,而且满足2的幂次方的乘除运方,可以采用位移的方式进行。

 

时间: 2024-08-04 11:18:43

C#移位运算(左移和右移)的相关文章

[大数据量]java移位运算与位运算与数据类型的存储

站在巨人的肩膀上,参考其他博客文章,汇总于此:  1G=1024M=1024K=1024BYTE=8BIT  Java数据类型的存储:(举例说明) 问:int 型的在内存中怎么存储,假设 int a=21:那么a是怎么被存到计算机里的.怎样把 a 变成二进制数. 怎么样把 a 存到 byte[]数组中? 答:int占4个字节,byte是1个字节,每个字节8位. 所以2进制的话,int最多可以表示正负一共2的32次方个数,byte则是2的8次方. e.g. int=21;在计算机中表示为00000

Java中的位运算符、移位运算详细介绍_java

一.位运算 Java中有4个位运算,它们的运算规则如下: (1)按位与 (&) :两位全为1,结果为1,否则为0: (2)按位或 (|) :两位有一个为1,结果为1,否则为0: (3)按位取反(~):0 变 1, 1变0: (4)按位异或(^):两位,如果相同,结果为0:如果不同,结果为1: 注意: (1)位运算中的 符号位(最高位)也跟着变; (2)位运算符与逻辑运算符(逻辑与&&.逻辑或||.逻辑非! )有点相似.但是,逻辑运算符只能操作boolean变量 (也就是左右两边的值

php移位运算、移位操作学习笔记

位运算应用口诀 清零取位要用与,某位置一可用或 若要取反和交换,轻轻松松用异或   移位运算 要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形.      2 "<<" 左移:右边空出的位上补0,左边的位将从字头挤掉,其值相当于乘2.      3 ">>"右移:右边的位被挤掉.对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统.      4 ">>>&q

c++-关于移位运算的一个问题,十分不解

问题描述 关于移位运算的一个问题,十分不解 今天发现一个问题, 假如 i = 12, 那么 j = i >> 32, 则j = 12:但是j = i >> 31,j = j >> 1,则j = 0为什么呀. 解决方案 对于右移大于或等于位宽的操作,或者右移负数的操作,其结果将依赖于编译器的处理和硬件指令的处理,并不唯一.32正好是一个int变量所占的内存,但这种位移的行为是未定义的.由编译器决定,所以没有标准答案.在VC++编译器上是等于原值的 LZ可以看一下汇编的代码

C语言里的左移和右移运算

先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如: int i = 1;i = i << 2; //把i里的值左移2位 也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成000...0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了(有符号数不完全适用,因为左移有可能导致符号变化,下面解释原因) 需要注意的一个问题是int类型最左端的

C语言位运算符:与、或、异或、取反、左移与右移详细介绍_C 语言

位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将

CSS怎么将背景图左移/上移/右移10px

将背景图左移,对background定位属性使用比较熟悉的朋友应该很容易就可以做到,下面有个不错的示例,不会的朋友可以参考下   背影图片的左上角相对当前元素左上角的坐标. 右为X轴正半轴, 下为Y轴正半轴 当前元素左上角坐标为 0,0 默认图片的左上角正对当前元素的左上角 如果图片想向左移 10px; 复制代码 代码如下: background:url(images/hh.gif) no-repeat -10px 0;} 如果图片想向上移 10px; 复制代码 代码如下: background

关于左移和右移

一.文章来由 项目需要将一个int拆开成高16位和低15位存不同的id,形成一个新的id,所以~~~ 二.算术移位和逻辑移位 算术移位-有符号数的倍增.减半: 逻辑移位-无符号数的倍增.减半. 比如一个有符号位的8位二进制数11001101,逻辑右移就不管符号位,如果移一位就变成01100110.算术右移要管符号位,右移一位变成10100110. 左移 逻辑左移=算数左移,右边统一添0. 右移 (1)逻辑右移,左边统一添0(无符号) (2)算数右移,左边添加的数和符号有关(有符号) e.g:10

C语言实现数组的循环左移,右移,翻转

数组结合指针可以实现很多有趣的功能,比如下面这个程序: 假设数组为 : 12345 如果左移一次即为:23451 ,依次类推 如果右移一次即为:51234 ,依次类推 翻转则为:54321 我们来实现下这个程序: #include <stdio.h> #include <stdlib.h> #include <string.h> #define NR(x) (sizeof(x)/sizeof(x[0])) //数组左移 int buffer_left_move(int