當前位置:編程學習大全網 - 網站源碼 - c語言中負數除法和右移的區別

c語言中負數除法和右移的區別

對於無符號整數,除法和右移效果是壹樣的;

對於有符號的正整數,除法和右移的效果也是壹樣的;

對於有符號的負整數,除法和右移的效果是不壹樣的;

比如:-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 博客 ,全文地址請點擊: /liubo_10184653/article/details/80500418?utm_source=copy

  • 上一篇:易語言抽號程序的源碼
  • 下一篇:javaweb中怎麽使用jquery easyui 1.4.2
  • copyright 2024編程學習大全網