C:算术移位和逻辑移位傻傻分不清楚

2023-12-07 21:01

本文主要是介绍C:算术移位和逻辑移位傻傻分不清楚,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.  算术移位与逻辑移位概念

算术移位指令对带符号数进行移位。

逻辑移位指令对无符号数进行移位。

算术左移、右移,逻辑左移、右移 如图所示 :

         这里有一个进位位C,它就是标志寄存器 (即状态寄存器,亦称程序状态字寄存器PSW)中的那个进位位,指示是否有进位或者借位,若有则该位为1,否则为0。

        逻辑左移跟算术左移完全一样。

        逻辑右移跟算术右移则不一样,逻辑右移的最高位在移出后补0,而在算术右移中,最高位(这里的最高位指整个编码的最高位,即有 符号数的符号位)不变,其他跟逻辑右移一样。 

2.  循环移位 

        另外还有循环移位,分为带进位位C 和 不带进位位C  两种 。

        注意,在循环移位中没有算术、逻辑之分,只有是否带进位位之分,不要搞混淆 。

        在循环移位中,只有“带进位的循环右移”这种方式中,进位位C 才对移位后的结果产生影响,其他的进位位都是受影响(被 新移入的二进制位覆盖),这需要特别注意。

这篇关于C:算术移位和逻辑移位傻傻分不清楚的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/467351

相关文章

【OpenCV2.2】图像的算术与位运算(图像的加法运算、图像的减法运算、图像的融合)、OpenCV的位运算(非操作、与运算、或和异或)

1 图像的算术运算 1.1 图像的加法运算 1.2 图像的减法运算 1.3 图像的融合 2 OpenCV的位运算 2.1 非操作 2.2 与运算 2.3 或和异或 1 图像的算术运算 1.1 图像的加法运算 add opencv使用add来执行图像的加法运算 图片就是矩阵, 图片的加法运算就是矩阵的加法运算, 这就要求加法运算的两张图shape必须是相同的. # 图片加法imp

[编程之美] 2.17 字符串循环移位

题目 将字符串向右循环移动 k 位 s = "abcd123" k = 3Return "123abcd" 思路 方法一 翻转法 将子串 s[0:str.length() - k)] 翻转,子串s[str.length() - k,str.length()] 翻转。然后将整个字符翻转可以到最终结果。 eg: 将 abcd123 中的 abcd 和 123 单独翻转,得到 dcba3

[编程之美] 3.1 字符串循环移位包含

题目 s1 = AABCD, s2 = CDAA Return : true 给定两个字符串 s1 和 s2,要求判定 s2 是否能够被 s1 做循环移位得到的字符串包含。 思路 以S1 = ABCD 为例,对其循环移位的后果为: ABCD -> BCDA -> CDAB -> DABC -> ABCD S1S1 = ABCDABCD 看出对S1做循环移位所得到的字符串都将是字符串S1S1的

日系编曲:日系架子鼓写作思路 支点音符 幽灵音 抢拍(重音移位)半速与倍速

分子大于3的拍子都是由若干个二拍子和三拍子组成的,且在组成时要保证三拍子的最大数量,且在排列时三拍子尽可能在前。 二拍子与三拍子 分子大于3的拍子都是由若干个二拍子和三拍子组成的,且在组成时要保证三拍子的最大数量,且在排列时三拍子尽可能在前。 比如8/4拍就是3+3+2形式,7/4拍则是3+2+2形式 二拍子:强、弱 三拍子:强、弱、弱 当复合时,除了第一个强拍,后面的强拍都成

Java:位运算符,移位运算

一 位运算符 1.按位与------ & 运算法则: 2.按位或------ | 运算法则: 3.按位异或------ ^ 运算法则: 4.按位取反------ ~ 运算法则: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0 二  移位运算 1.左移  << 运算法则: 2.右移  >> 运算法则: 3.无符号右移  >>>

从VHDL代码到真实硬件:设计一个8位算术逻辑单元

在这个项目中,我们使用VHDL语言创建了一个8位算术逻辑单元(ALU),并在连接到带有输入开关和LED显示器的自定义PCB的Altera CPLD开发板上运行它。 本文引用地址:https://www.eepw.com.cn/article/202409/462593.htm 使用基于硬件的方法开发电子系统并不总是需要将各种晶体管和逻辑门物理连接到面包板或PCB上。可以使用离散逻辑构建算术逻辑单

整数算术运算中的错误

如果一个整数被零除,将不会产生正确的结果,而是出现一个异常( exception ).在Java中,异常是标志错误的一种方法,我们将在第7章中详细地介绍。对变量或表达式应用%运算符,如果右侧的操作数是零,也将导致一个异常。     注意,如果一个整型表达式产生的值超出了结果类型的取值范围,这个结果就会按照该数据类型的存储位数截断,结果是不正确的,而且不会得到任何提示。这样处理可以确保在程序中应

代码开源许可证傻傻分不清 Apache MIT GPL的区别

https://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html

自己动手写CPU_step6_算术运算指令

序 接上篇,本篇开始实现算数运算指令,包括加减乘除,加减比较好实现,乘除则需要考虑指令周期与其他指令的周期长度不一致问题,可能会导致流水线效率下降,本篇先实现简单的算术运算。 指令定义 `define EXE_ADD 6'b100000 // rs + rt -> rd(检查溢出)`define EXE_ADDU 6'b100001 // rs +

编程之美2.17之数组循环移位

题目描述:设计一个算法,把一个含有N个元素的数组循环右移K位,要求算法的时间复杂度位 O(Log2N) O(Log_2N),且只允许使用两个附加变量。 什么意思呢,就是说如果输入序列为:abcd1234,右移2位即变为34abcd12。唯一的要求就是使用两个附加变量。 其实这道题编程珠玑上面也出现过,书中给出的一种符合题意的解法是巧妙地进行翻转。以把abcd1234右移4位为例: 第一步:翻