C/C++ 左移<<, 右移>>的作用及说明

目录
  • C/C++ 左移<<, 右移>>作用
    • 1. 左移 <<
    • 2. 右移 >>
    • 3. 数字 1 左移 <<
  • C++ 左移右移越界情况
    • 左移越界
    • 右移越界

C/C++ 左移<<, 右移>>作用

1. 左移 <<

取两个数字,左移第一个操作数的位,第二个操作数决定要移动的位置。换句话说,左移动一个整数 x 和一个整数 y ( x < < y ) 等于 x 乘以 2y

代码示例:

/* C++ Program to demonstrate use of left shift
   operator */
#include<stdio.h>
int main()
{
    // a = 5(00000101), b = 9(00001001)
    unsigned char a = 5, b = 9;  

    // The result is 00001010
    printf("a<<1 = %d\n", a<<1); 

    // The result is 00010010
    printf("b<<1 = %d\n", b<<1);
    return 0;
} 

输出结果:

a<<1 = 10
b<<1 = 18

2. 右移 >>

取两个数字,向右移动第一个操作数的位,第二个操作数决定移动的位置。同样地,右平移( x > > y )等于x除以 2y.

代码示例:

/* C++ Program to demonstrate use of right
   shift operator */
#include<stdio.h> 

using namespace std;
int main()
{
    // a = 5(00000101), b = 9(00001001)
    unsigned char a = 5, b = 9;  

    // The result is 00000010  

    printf("a>>1 = %d\n", a>>1); 

    // The result is 00000100
    printf("b>>1 = %d\n", b>>1);
    return 0;
}

输出结果:

a>>1 = 2
b>>1 = 4

3. 数字 1 左移 <<

1 << i = 2i。它只适用于正数。

代码示例:

#include<stdio.h>
int main()
{
   int i = 3;
   printf("pow(2, %d) = %d\n", i, 1 << i);
   i = 4;
   printf("pow(2, %d) = %d\n", i, 1 << i);
   return 0;
}

输出结果:

pow(2, 3) = 8
pow(2, 4) = 16

注意事项:

C++ 左移右移越界情况

左移越界

  • 一个32位的long,值为1,
  • 左移32位 = 1
  • 左移33位= 2
  • ...
  • 左移64位= 1
  • 左移65位= 3

所以左移越界有点向循环左移,左移Index位--》相当于左移 Index%32位 ,当然%多少是根据变量类型来定的

int main() {

	long v[2] = {0,0};
	long u1 = 1;
	long u2 = (u1 <<33);
	v[1] |= (u1<<33);
	LOG(sizeof(long))
	cout << u1 <<"," <<u2<< "," << v[1]<< endl;
	std::cin.get();
}

输出:

右移越界

右移越界,移出去的位都会变成0

#include<iostream>
#include<vector>
#include<unordered_map>
using namespace std;
#define LOG(x) std::cout<<x<<std::endl;

int main() {

	long v[2] = {0,0};
	long u1 =3;
	long u2 = (u1 >>1);
	v[1] |= (u1>>1);
	LOG(sizeof(long))
	cout << u1 <<"," <<u2<< "," << v[1]<< endl;
	std::cin.get();
}

输出:

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • C/C++如何实现循环左移,循环右移

    目录 实现对一个无符号数的循环左移和循环右移 循环移位直接可用的函数(循环右移.循环左移) 整体代码 本文的小技巧 注意的地方 字符串循环左|右移实现(C/C++) 字符串循环右移K位 字符串循环左移K位 循环左右移结果相同条件 实现对一个无符号数的循环左移和循环右移 循环移位直接可用的函数(循环右移.循环左移) //val表示需要移位的数 n表示移位位数 //字节数乘以8代表一共多少位 //向右循环移n位的结果:假设数据一共size位,向左移size-n位,再与原数右移n位进行或操作的结果 /

  • 详解汇编语言RCL(带进位循环左移)和RCR(带进位循环右移)指令

    汇编语言是依赖于计算机的低级的程序设计语言. RCL(带进位循环左移)指令把每一位都向左移,进位标志位复制到 LSB,而 MSB 复制到进位标志位: 如果把进位标志位当作操作数最高位的附加位,那么 RCL 就成了循环左移操作.下面的例子中,CLC 指令清除进位标志位.第一条 RCL 指令将 BL 最高位移入进位标志位,其他位都向左移一位.第二条 RCL 指令将进位标志位移入最低位,其他位都向左移一位: clc                             ; CF = 0 mov bl

  • 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

  • c语言左移和右移的示例详解

    逻辑移位,简单理解就是物理上按位进行的左右移动,两头用0进行补充,不关心数值的符号问题. 算术移位,同样也是物理上按位进行的左右移动,两头用0进行补充,但必须确保符号位不改变. 算术移位指令 算术移位指令有:算术左移SAL(ShiftAlgebraic Left)和算术右移SAR(ShiftAlgebraic Right).算术移位指令的功能描述如下: (1)算术左移SAL把目的操作数的低位向高位移,空出的低位补0: (2)算术右移SAR把目的操作数的高位向低位移,空出的高位用最高位(符号位)填

  • C/C++ 左移<<, 右移>>的作用及说明

    目录 C/C++ 左移<<, 右移>>作用 1. 左移 << 2. 右移 >> 3. 数字 1 左移 << C++ 左移右移越界情况 左移越界 右移越界 C/C++ 左移<<, 右移>>作用 1. 左移 << 取两个数字,左移第一个操作数的位,第二个操作数决定要移动的位置.换句话说,左移动一个整数 x 和一个整数 y ( x < < y ) 等于 x 乘以 2y 代码示例: /* C++ Progr

  • JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例

    本文实例讲述了JS与jQuery实现ListBox上移,下移,左移,右移操作功能.分享给大家供大家参考,具体如下: 先来看看Javascript版选择下拉菜单互移且排序操作: <html> <head> <title>Javascript版选择下拉菜单互移且排序</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"&

  • go语言中iota和左移右移的使用说明

    在go语言中iota比较特殊,是一个被编译器修改的常量,在每一个const关键字出现时被重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字就会自动加1 左移运算符"<<"是双目运算符 左移n位就是乘以2的n次方. 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0. 右移运算符">>"是双目运算符

  • JavaScript实现两个select下拉框选项左移右移

    今天没事用js写了一个用两个select下拉框之间能互相移动元素的小程序,刚刚才开始学javascript还有很多优化的地方. Javascript代码 <script type="text/javascript"> /**选中的元素向右移动**/ function moveRight() { //得到第一个select对象 var selectElement = document.getElementById("first"); var optionE

  • ListBox实现上移,下移,左移,右移的简单实例

    复制代码 代码如下: <html><head>    <title>Javascript版选择下拉菜单互移且排序</title>    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body>    <p>选定一项或多项然后点击添加或移除(按住shift或ctrl可以

  • 29个要点帮你完成java代码优化

    通过java代码规范来优化程序,优化内存使用情况,防止内存泄露 可供程序利用的资源(内存.CPU时间.网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务.优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率.本文讨论的主要是如何提高代码的效率. 在Java程序中,性能问题的大部分原因并不在于Java语言,而是在于程序本身.养成好的代码编写习惯非常重要,比如正确地.巧妙地运用java.lang.String类和java.util.Vector类,它能够显著地提高程序的

  • C语言 位运算详解及示例代码

    所谓位运算,就是对一个比特(Bit)位进行操作.在<二进制思想以及数据的存储>一节中讲到,比特(Bit)是一个电子元器件,8个比特构成一个字节(Byte),它已经是粒度最小的可操作单元了. C语言提供了六种位运算符: 运算符 & | ^ ~ << >> 说明 按位与 按位或 按位异或 取反 左移 右移 按位与运算(&) 一个比特(Bit)位只有 0 和 1 两个取值,只有参与&运算的两个位都为 1 时,结果才为 1,否则为 0.例如1&1

  • Python全栈之运算符详解

    目录 1. 算数_比较_赋值_成员 1.1 算数运算符 1.2 比较运算符 1.3 赋值运算符 1.4 成员运算符 2. 身份运算符 小提示: 3. 逻辑运算符 3.1 位运算符 3.2 小总结 4. 代码块_单项_双项分支 4.1 代码块 4.2 流程控制 4.3 单项分支 4.4 双项分支 5. 小作业 总结 1. 算数_比较_赋值_成员 1.1 算数运算符 算数运算符: + - * / // % ** # + var1 = 7 var2 = 90 res = var1 + var2 pri

随机推荐