C/C++ 左移<<, 右移>>的作用及说明
作者:慕木子 发布时间:2021-12-30 01:42:59
标签:C,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();
}
输出:
来源:https://blog.csdn.net/MumuziD/article/details/109161095
0
投稿
猜你喜欢
- 题目一链表题——操作链表根据给定的链表按照指定条件删除其中节点并返回新的头节点具体题目如下解法/**
- 继承的概念继承是面向对象编程中的一个概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。子类在继承父类的同时也
- 1. 新建TestServlet类package com.yanek.test;import java.io.IOException;imp
- 职责链模式简介及UML职责链也叫责任链,他是一种行为型模式,它为请求创建了一个接收请求者对象的链,并将请求沿着这条链传递到目标对象去处理。该
- TubeMQ总体介绍TubeMQ是腾讯大数据在2013年开始研发的分布式消息中间件系统(MQ),专注服务大数据场景下海量数据的高性能存储和传
- List 是在开发中比较常用的集合,今天总结一下 Java 中初始化 List 的几种方式。1、常规方式List<String>
- 主要是应对这种需求:软件只允许启动一次。将这个问题转化一下,可以这样描述:对于一个软件,在启动一个进程之后,不允许启动其它进程,如果第二次打
- 1.面对对象的初步认识1.1什么是面向对象用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。1
- 整理文档,搜刮出一个java实现向有序数组中插入一个元素,稍微整理精简一下做下分享package cn.jbit.array; import
- 说明本实例能够监控聚划算的抢购按钮,在聚划算整点聚的时间到达时自动弹开页面(URL自己定义)。可以自定义监控持续分钟数,同时还可以通过多线程
- 一般,我们的web应用都是只有在用户登录之后才允许操作的,也就是说我们不允许非登录认证的用户直接访问某些页面或功能菜单项。我还记得很久以前我
- C#版本public static Component AddComponent(GameObject go, string assembl
- 开发项目的时候,表很多,是不可能一点点的自己去写xml ,dao文件的,这里就需要用到代码的自动生成工具了。第一步:导入jar包,当然,这之
- 本文所述为基于C#实现的三层架构。对于三层的概念查相信大家并不陌生,这里举一个关于三层的简单实例,真正看一下它是如何具体实现的.我们先来一起
- 1.添加命名空间System.IO;System.Text;2.文件的读取(1).使用FileStream类进行文件的读取,并将它转换成ch
- 本文实例为大家分享了C#实现串口示波器的具体代码,供大家参考,具体内容如下开发工具visual studio2019C#串口示波器,实时刷新
- 目录业务场景:解决方案:总结业务场景:一个用户数据接口,要求在20ms内返回数据,它的调用逻辑复杂,关联接口多,需要从3个接口汇总数据,这些
- 本文实例讲述了Android实现内存中数据保存到sdcard的方法。分享给大家供大家参考,具体如下:public static void w
- 换了工作要把Java重新捡起来了,这个在大学里用过的语言,虽然不复杂,还是有一些奇怪的地方的。比如static import。Static
- 当你在开发flutter应用的时候,有时会需要调用native的api,往往遇到flutter并没有相应的package, 这时候flutt