歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C語言中除以2的冪

C語言中除以2的冪

日期:2017/3/1 10:00:32   编辑:Linux編程

在大多數機器上,除法要比乘法(乘法需要10個或更多時鐘周期)更慢,需要30個或更多的時鐘周期。除以2的冪可以用移位運算來實現,只需要一個時鐘周期。

無符號和補碼數分別使用邏輯移位和算術移位來達到目的。

整數除法總是捨入到零。對於使用算術右移的補碼機器,C表達式:x / y = ( x < 0 ? ( x + ( 1 << k ) - 1 ) : x ) >> k。(其中,y = 2k )

下面是x/16的C語言實現:

/*
習題2.42
開發環境VC++6.0
*/
#include<stdio.h>

int div16(int x);

void main(){
int x;
while(1){
printf("input an integer(exit with 0):\n");
scanf("%d",&x);
if(x == 0) break;
printf("div16(x) = %d\n",div16(x));
}
}

int div16(int x){
int bias = (x >> 31) & 0XF;
return (x + bias) >> 4;
}

Copyright © Linux教程網 All Rights Reserved