关于左移和右移

简介:

一、文章来由

项目需要将一个int拆开成高16位和低15位存不同的id,形成一个新的id,所以~~~

二、算术移位和逻辑移位

算术移位—有符号数的倍增、减半;
逻辑移位—无符号数的倍增、减半.

比如一个有符号位的8位二进制数11001101,逻辑右移就不管符号位,如果移一位就变成01100110。算术右移要管符号位,右移一位变成10100110。

左移
逻辑左移=算数左移,右边统一添0。
右移
(1)逻辑右移,左边统一添0(无符号)
(2)算数右移,左边添加的数和符号有关(有符号)

e.g:1010101010,其中[]位是添加的数字
逻辑左移一位:010101010[0]
算数左移一位:010101010[0]
逻辑右移一位:[0]101010101
算数右移一位:[1]101010101

三、一个有说服力的例子

#include <stdlib.h> 
#include <stdio.h>
#include <iostream>

using namespace std;

void showInBinary(int number) {

    char string[100];

    itoa(number, string, 2); 
    printf("integer = %3d string = %s\n", number, string);
}

int main() 
{ 
    int number = -5;
    cout<<"左移之前"<<endl;
    showInBinary(number);

    number = number<<29;

    cout<<"左移之后"<<endl;
    showInBinary(number);

    return 0; 
}

运行结果:
这里写图片描述

可见是将 -5 左移 29 位后变成正数了~~~

同时这个又扯出来一个问题:什么负数左移1位变成正数?

请看下一篇文章~~~

相关文章
|
4月前
|
存储
算数移位,逻辑移位以及循环移位
算数移位,逻辑移位以及循环移位
71 0
|
4月前
|
运维 安全 Devops
什么是安全左移,如何实现安全左移
传统软件开发面临安全挑战,如意识缺失、代码漏洞、第三方组件风险、配置管理问题及应对新型攻击能力不足。为改善现状,需采取安全左移策略,将安全措施提前至开发早期,与SDL结合,确保安全贯穿SDLC始终。安全左移面临计划制定、责任转移、工具选择等挑战,需通过规划、培训和选用合适工具应对。DevSecOps模式进一步将安全融入DevOps,提升开发效率和软件安全性,实现开发、安全和运维的协同。SDL与DevSecOps相辅相成,前者注重安全过程,后者强调安全文化与自动化。
206 1
什么是安全左移,如何实现安全左移
|
4月前
|
测试技术
测试右移
测试右移
测试右移
|
C语言
C/运算符(按位与、按位或、按位异或)
C/运算符(按位与、按位或、按位异或)
|
C语言 Python
左移(<<),右移(>>), (i++ 如果没有接收方,那么“先使用”,如何理解?),取余和取模一样吗?
左移(<<),右移(>>), (i++ 如果没有接收方,那么“先使用”,如何理解?),取余和取模一样吗?
位运算中的按位与(&),按位或(|),按位异或(^)
位运算中的按位与(&),按位或(|),按位异或(^)
115 0
位运算中的按位与(&),按位或(|),按位异或(^)
|
Java
java中的左移、右移、无符号右移
阅读java源码会经常碰到左移与右移运算。那么左移与右移都是怎么运算呢?查询资料学习了下,这里做个总结。
286 0
java中的左移、右移、无符号右移