深入理解左右移

简介: 深入理解左右移

博文内容:

本讲将带你深剖C语言中的左右移和丢弃问题

本讲将会教你灵活使用符号,比如使用加减符和异或完成不创建第三方变量交换两个变量值;用逻辑运算符实现if语句的功能

★博文转载请注明出处。

左移、右移

概念

<<(左移): 最高位丢弃,最低位补零

>>(右移):

1. 无符号数:最低位丢弃,最高位补零【逻辑右移】

2. 有符号数:最低位丢弃,最高位补符号位【算术右移】

如何理解“丢弃”

<< 或者 >> 都是计算,都要在CPU中进行,可是参与移动的变量,是在内存中的。 所以需要先把数据移动到CPU内寄存器中,再进行移动。

那么,在实际移动的过程中,是在寄存器中进行的,即大小固定的单位内。                          那么,左移右移一定会有位置跑到"外边"的情况,跑到外面的数字在之后使用提取数据时无法复原,这就叫做丢弃


具体过程如下图:

深度理解左移右移

分析下面的代码:

#include <stdio.h>
int main()
{
    //左移
    unsigned int a = 1;
    printf("%u\n", a << 1);
    printf("%u\n", a << 2);
    printf("%u\n", a << 3);
    //逻辑右移
    unsigned int b = 100;
    printf("%u\n", b >> 1);
    printf("%u\n", b >> 2);
    printf("%u\n", b >> 3);
    //算术右移,最高位补符号位1, 虽然移出了最低位1,但是补得还是1
    int c = -1;
    printf("%d\n", c >> 1);
    printf("%d\n", c >> 2);
    printf("%d\n", c >> 3);
    //是无符号数,最高位丢弃(逻辑右移),最高位补0
    unsigned int d = -1;
    printf("%d\n", d >> 1);
    printf("%d\n", d >> 2);
    printf("%d\n", d >> 3);
return 0;
}

结论:

我们可以得出结论:


左移,无脑补0

右移,先判定是算术右移还是逻辑右移,判定依据:看自身类型,和变量的内容无关。                             只有判定了是算术,还是逻辑,才能决定最高位补什么

还有一个小细节:正数右移相当于/2,大家可以自己再找几个例子分析一下就出来了


后记:

●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

                                                              ——By 作者:德塔


相关文章
|
Linux 网络安全
CentOS 7 SSH连接超时自动断开解决方案
CentOS 7 SSH连接超时自动断开解决方案
1460 0
CentOS 7 SSH连接超时自动断开解决方案
|
Java 关系型数据库 MySQL
IDEA(Community版)数据库插件Database Navigator的安装与使用教程
IDEA(Community版)数据库插件Database Navigator的安装与使用教程
IDEA(Community版)数据库插件Database Navigator的安装与使用教程
|
缓存 负载均衡 网络协议
高并发架构的CDN知识介绍
本文详细介绍了网络请求过程,特别是大型网站架构中DNS和CDN的作用。通过一张常用架构图,文章解释了从客户端请求到服务器响应的全过程,包括DNS解析、负载均衡、CDN加速等关键环节,帮助读者深入了解高并发架构的设计原理和优化方法。
627 1
|
关系型数据库 MySQL 数据库连接
在 Go 中管理多个数据库连接
在 Go 中管理多个数据库连接
|
NoSQL MongoDB 数据库
MongoDB数据恢复—MongoDB数据库文件被破坏的数据恢复案例
服务器数据恢复环境: 一台Windows Server操作系统服务器,服务器上部署MongoDB数据库。 MongoDB数据库故障&检测: 工作人员在未关闭MongoDB数据库服务的情况下,将数据库文件拷贝到其他分区。拷贝完成后将原MongoDB数据库所在分区进行了格式化操作,然后将数据库文件拷回原分区,重新启动MongoDB服务,服务无法启动。
|
监控 安全 Cloud Native
零信任安全模型:构建未来数字世界的安全基石
在数字化转型的浪潮中,云原生技术已成为推动企业创新和灵活性的关键力量💡。然而,随着技术的进步和应用的广泛,网络安全威胁也日益严峻🔓,传统的网络安全模型已经难以应对复杂多变的网络环境。在这样的背景下,零信任安全模型(Zero Trust)应运而生,成为提升网络安全防护能力的重要策略🛡️。本文将深入探讨零信任的概念、必要性、以及它如何解决传统网络模型面临的痛点和挑战。
零信任安全模型:构建未来数字世界的安全基石
|
安全 Unix Linux
Xshell和Xftp的安装和使用
Xshell和Xftp的安装和使用
289 0
|
存储 网络协议 安全
「译文」CMDB 最佳实践技术指南 -3-CMDB 应用映射 - 技术原理和最佳实践
「译文」CMDB 最佳实践技术指南 -3-CMDB 应用映射 - 技术原理和最佳实践
|
存储 弹性计算 运维
自动化收集员工信息的Shell脚本
【4月更文挑战第30天】
163 0