美文网首页
c语言中负数除法和右移的区别

c语言中负数除法和右移的区别

作者: icey_J | 来源:发表于2018-10-01 23:50 被阅读0次

对于无符号整数,除法和右移效果是一样的;
对于有符号的正整数,除法和右移的效果也是一样的;
对于有符号的负整数,除法和右移的效果是不一样的;
比如:-3/2 = -1;-3>>1是多少呢?
我们可以将其按照8位二进制展开-3的8位二进制是1000 0011,负数在计算机中是以补码的形式存储的,所以还需要将其转换成补码1000 0011
转换成反码 1111 1100(最高位符号位不动), 再加1转换成补码1111 1101
接着将其右移1位,由于是有符号负整数,所以最高位补1,变为1111 1110
接着将其还原成原码,1111 1110减1变反码1111 1101,接着反码取反变原码1000 0010,转换成十进制是-2,
也就是说-3>>1得到的是-2
其实这是因为除法是向0取整,而右移位是向负取整
-3/2=-1.5=-1(向0取整),-3>>1=-1.5=-2(向负取整);
如果我们需要右移达到的效果和除法一样,可以采取下列公式:
假设除数为2^N,负数x的除法可以用以下方法来代替:(x + 2^N - 1) >> N


本文来自 西门一雪 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/liubo_10184653/article/details/80500418?utm_source=copy

相关文章

  • c语言中负数除法和右移的区别

    对于无符号整数,除法和右移效果是一样的;对于有符号的正整数,除法和右移的效果也是一样的;对于有符号的负整数,除法和...

  • 数学基础

    逻辑右移在 Java 和 Python 语言中使用 >> >,算数右移使用>>,在C语言中不做区分,>>如果该数字...

  • 16_位运算符分析

    关键词: C语言中的位运算符、 左移和右移注意点、位运算防错准则、 位运算符和逻辑运算符的区别 1. C语言中的位...

  • 二分查找法

    Java>>与>>>的区别>>:带符号右移。正数右移高位补0,负数右移高位补1。比如:4 >> 1,结果是2;-4...

  • 取模

    取模和求余主要区别在负数。 c语言中求余,-1%255=-1;python中取模,-1%255=254.

  • Java基础知识--“位移”

    ** 文章摘要 **1、移位包括左移和右移。左移相当于乘法,右移相当于除法。2、右移包括带符号右移,无符号右移。 ...

  • C语言左移和右移

    C语言中左移表示左移运算符,就是把最高位丢弃掉然后在最低位补0;而C语言中的右移就是右移运算法,与左移是相反的,它...

  • C++位运算初步研究

    C++位运算包括: <<左移:左侧丢弃,右侧补0 >>右移:注意负数右移时,左侧通常补1 &与:两个都为1取1,否...

  • LeetCode 189.旋转数组

    给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 C

  • C语言中"%"和"/"的区别

    % 是取余运算符 比如2%3=2 4%3=1 / 是整除运算符 比如 2/3=0, 10/3=3

网友评论

      本文标题:c语言中负数除法和右移的区别

      本文链接:https://www.haomeiwen.com/subject/hhenoftx.html