32位算术逻辑运算单元alu设计_算术移位和逻辑移位详解

2023-10-26

大部分的C编译器,用移位的方法得到代码比调用乘除法子程序生成的代码效率高。

最近在看Java源码的时候,看到了一些位运算的操作,特意在整理了一下移位运算,不整理不知道,一整理吓一跳,那就随着一起看下去吧!

移位运算是将数值向左向右移动,对于十进制来说就是实现放大十倍和缩小十倍的效果,而对于二进制而言就是放大两倍和缩小两倍的效果。

整数的乘除法

一个自己曾经忽视的东西,那就是C/C++中的移位操作容易出错的情况。

1、什么样的数据类型可以直接移位

char、short、int、long、unsigned char、unsigned short、unsigned int、unsigned long都可以进行移位操作,而double、float、bool、long double则不可以进行移位操作。

2、有符号数据类型的移位操作

对于char、short、int、long这些有符号的数据类型:

对负数进行左移:符号位始终为1,其他位左移
对正数进行左移:所有位左移,即 <<,可能会变成负数
对负数进行右移:取绝对值,然后右移,再取相反数
对正数进行右移:所有位右移,即 >>

这里很重要,具体为啥是这样,文章之后会解释!

3、无符号数据类型的移位操作

对于unsigned char、unsigned short、unsigned int、unsigned long这些无符号数据类型:

没有特殊要说明的,使用<< 和 >> 操作符就OK了

算术移位和逻辑移位运算

逻辑移位
对于逻辑移位,就是不考虑符号位,移位的结果只是数据所有的位数进行移位。根据移位操作的目的,左移时,低位补0,右移时,高位补0;
例:
01010101>>3=00001010
01101011<<3=01011000
Q1:此时是不是就有一个问题,不考虑符号位,如果一个负数,逻辑右移,结果就会变成正数,例如
10000101=-5>>1=01000010=66
的确是的,因为这是逻辑运算的特点,算术移位运算才会考虑符号位!
Q2:如果一个有符号数,逻辑左移,导致符号位变化,此时也算逻辑运算的特点吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

32位算术逻辑运算单元alu设计_算术移位和逻辑移位详解 的相关文章

  • 如何解决springboot参数传中文乱码

    前言 本文案例来自业务部门的一个业务场景 他们的业务场景是他们部门研发了一个微服务上下文透传组件 其透传原理也挺简单的 就是通过springboot拦截器把请求参数塞进threadlocal 然后下游通过threadlocal取到值 服务之
  • 时序预测

    时序预测 MATLAB实现AR时间序列预测 目录 时序预测 MATLAB实现AR时间序列预测 基本介绍 程序设计 学习总结 参考资料 基本介绍 如果某个时间序列的任意数值可以表示自回归方程 那么该时间序列服从p阶的自回归过程 可以表示为AR
  • stable diffusion实践操作-常见lora模型介绍

    系列文章目录 本文专门开一节写Lora相关的内容 在看之前 可以同步关注 stable diffusion实践操作 文章目录 系列文章目录 前言 一 什么是lora 1 1 lora 定义 1 2 lora的基本原理 1 2 通过分层控制l
  • 面向对象(带参实例)——加减乘除运算

    实现加减乘除运算 代码如下 public class Daican int num1 int num2 public double cal String opr public double cal String opr int num1 i
  • 《信号与系统学习笔记》—信号与系统的时域和频域特性(二)

    注 本博客是基于奥本海姆 信号与系统 第二版编写 主要是为了自己学习的复习与加深 一 一阶与二阶连续时间系统 一 一阶连续时间系统 1 对于一个一阶系统 其微分方程往往表示成下列形式 区中t是一个系数 相应的一阶系统的频率响应是 其单位冲激
  • 锁的升级过程

    再此之前我们需要先了解一下什么是cas和aba 一 CAS 我们使用多线程来访问一个变量的时候 会出现相应的并发的情况 所以我们需要对这个变量进行加锁操作 但是我们也可以不进行加锁 我们先将查询到了的变量值放到内存中 然后将相应的然后我们要
  • ROS的ros_canopen调试

    Ros canopen是ros支持can通信的package 链接 http wiki ros org ros canopen distro indigo Ros canopen包结构如下 SocketCAN是一组开源的CAN驱动程序和网络
  • Linux内核中网络数据包的接收, 涉及到select/poll/epoll

    转自 https blog csdn net dog250 article details 50528280 与网络数据包的发送不同 网络收包是异步的的 因为你不确定谁会在什么时候突然发一个网络包给你 因此这个网络收包逻辑其实包含两件事 1
  • mysql 登录hang_MySQL客户端连接登入hang住原因分析

    作者 八怪 高鹏 中亦科技数据库专家 原文 https www jianshu com p 93b69955344b 一 问题来源 问题来自一位朋友 如下 mysql客户端无法登陆 查看服务器负载没有发现高负载信息 通过pstack查看线程
  • 普通人是否能从ChatGPT中分一杯羹?

    ChatGPT3 0刚刚推出 最开始的时候 人们只是将ChatGPT看作一个很会聊天的机器人 无论问题多么天马行空 它的答案看上去都有理有据 后来 像打开潘多拉魔盒一样 很多人开始拿它编大纲 撰写文案 编代码 创作剧本 写法律文书 还可以出
  • 服务器数据库怎么导入数据库文件路径,服务器数据库导入sql文件路径

    服务器数据库导入sql文件路径 内容精选 换一换 下载MySQL源码包 includes Boost Headers cd home wget https dev mysql com get Downloads MySQL 5 7 mysq
  • 多个线程访问共享对象和数据的方式

    一 如果每个线程执行的代码相同 可以使用同一个Runnable 对象 这个Runnable对象中有那个共享的数据 例如买票系统就可以这样做 代码如下 package com thread class ShareDataTest1 publi
  • 编译器架构的王者LLVM——(9)栈式符号表的构建

    LLVM平台 短短几年间 改变了众多编程语言的走向 也催生了一大批具有特色的编程语言的出现 不愧为编译器架构的王者 也荣获2012年ACM软件系统奖 题记 版权声明 本文为 西风逍遥游 原创文章 转载请注明出处 西风世界 http blog
  • Centos升级openssh的正确方式

    准备工作 升级ssh可能会造成服务器无法连接 如果不能直接操作服务器 请开启telnet或者vnc 查看openssl版本 openssl version 在这里下载1 0 2版本 https www openssl org source
  • Spring的AOP五大通知注解

    通知注解 声明方法 在方法前加入通知注解 指定要拦截的对象信息 注意 代表任意修饰符号 任意值 AOP五大通知注解 Before 前置通知 在方法执行之前执行 After 后置通知 在方法执行之后执行 无论是否发生异常 还不能访问目标方法执
  • C++复合模式:Compound Pattern

    模式通常被一起使用 并被组合在同一个设计解决方案中 复合模式在一个解决方案中结合两个或多个模式 以解决一般或重复发生的问题 注 是为了解决一般或重复发生的问题 而不是简单的认为使用了多个模式就是复合模式 绝不要为了使用模式而使用模式 具体问
  • 基于 Flask 的简易 Mock 平台

    https testerhome com topics 14753
  • Linux——md5命令

    文章目录 介绍 选项 使用案例 生成文件md5值 文本模式或二进制模式 md5值重定向 重定向追加 md5校验 实际开发场景 介绍 md5sum命令用于生成和校验文件的md5值 它会逐位对文件的内容进行校验 是文件的内容 与文件名无关 也就
  • KEIL软件中编译时出现的Error L6200E: symbol multiply defined ...的解决方法

    今天在编程的时候遇到了这个问题 在网上查找了好多办法 都没有什么效果通过ctrl f 发现自己并没有重新定义 而且这两个 c文件都是移植且可以用的 然后我就准备一点一点的删mian c中的内容 看看是哪的问题 当我删掉 include lc

随机推荐