日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言无符号整型除法,用位运算的方法实现无符号整数的除法,游戏编程 | 李大仁博客...

發(fā)布時(shí)間:2023/12/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言无符号整型除法,用位运算的方法实现无符号整数的除法,游戏编程 | 李大仁博客... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

相信知道除法的作用的人都知道除法怎么來計(jì)算吧,不過計(jì)算機(jī)計(jì)算除法的方法可能優(yōu)點(diǎn)浪費(fèi)資源了以下是使用位計(jì)算轉(zhuǎn)換除法的過程,相信知道游戲編程的朋友對這個(gè)應(yīng)該不陌生吧

原理:假如要實(shí)現(xiàn)A/B,B如果是2的整數(shù)次方的話,那就不用說的,直接位移了運(yùn)算如果是0,這個(gè)就不要問我了A/0等于多少我也不知道。

代碼:

bitDivide(){

if(B==0) error(0);//B=0

while(B >> 1){

int count;

count ++;

if (B==0) output(A >> count) ;//Log2^B=0

}

int r = count + 32; //32這個(gè)數(shù)字很重要,適合32位機(jī)器運(yùn)算

float f = 2 ^ r / B;

float t = f - ( int ) f; //取小數(shù)部分

float result;

if(t>0.5)

result=(A * f >> r) - (A >> count);

else if(t<0.5)

result=(( A + 1 ) * f >> r)-(A >> count);

else error(0);

output(result);

}

bitDivide(){

if(B==0) error(0);//B=0

while(B >> 1){

int count;

count ++;

if (B==0) output(A >> count) ;//Log2^B=0

}

int r = count + 32; //32這個(gè)數(shù)字很重要,適合32位機(jī)器運(yùn)算

float f = 2 ^ r / B;

float t = f - ( int ) f; //取小數(shù)部分

float result;

if(t>0.5)

result=(A * f >> r) - (A >> count);

else if(t<0.5)

result=(( A + 1 ) * f >> r)-(A >> count);

else error(0);

output(result);

}

解釋

首先取得B最高位就是 max(log2^B)

然后讓這個(gè)b加上 32 ,32這個(gè)數(shù)字很重要,適合32位機(jī)器運(yùn)算

假設(shè)一個(gè) r = 32 + b

再計(jì)算 f = 2^r / B,

再取 f的小數(shù)部分t

t < 0.5 , 結(jié)果為 (((A+1) * f) >> r)-(A>>count)

t > 0.5 , 結(jié)果為 ((A*f) >> r)-(A>>count)

t = 0.5, 錯(cuò)誤

附:機(jī)器實(shí)現(xiàn)整數(shù)除法的匯編源程序,來自CSDN

mov cx,16 ;結(jié)果為16位,循環(huán)16次

start:

SHL AX , 1 ;被除數(shù)左移1位

RCL DX , 1

CMP DX , BX ;試商

JB next ;當(dāng)前商為0,不處理

SUB DX , BX ;減去階數(shù)

OR AX , 1

next: loop start ;循環(huán)

mov cx,16 ;結(jié)果為16位,循環(huán)16次

start:

SHL AX , 1 ;被除數(shù)左移1位

RCL DX , 1

CMP DX , BX ;試商

JB next ;當(dāng)前商為0,不處理

SUB DX , BX ;減去階數(shù)

OR AX , 1

next: loop start ;循環(huán)

基本思想: 我們可以回想階法的手算運(yùn)程:

1。試商:將被除數(shù)和除數(shù)左對齊,看看被除大于等于除數(shù)的幾倍,得到當(dāng)前商,因?yàn)槭鞘M(jìn)制數(shù),故當(dāng)前商為0-9.

2. 將被除數(shù)減去除數(shù)的當(dāng)前商?倍.

3. 被除數(shù)左移1位,轉(zhuǎn)第一步,繼續(xù)試商。

然后 看二進(jìn)制除法,和十進(jìn)制除法手算類類似,二進(jìn)制除法也需3步,不過更加簡單。

1. 試商,因?yàn)槭嵌M(jìn)制數(shù),故 當(dāng)前商 為0-1. 被除數(shù)大于除數(shù),當(dāng)前商 置1,小于除數(shù),當(dāng)前商 置0

2。被除數(shù) 減去 除數(shù)的 當(dāng)前商 倍。當(dāng)前商為1,被除數(shù)減去除數(shù)。否則,被除數(shù)不變。

3. 被除數(shù) 左移1位(二進(jìn)制的移位),繼續(xù) 第1步.

總結(jié)

以上是生活随笔為你收集整理的c语言无符号整型除法,用位运算的方法实现无符号整数的除法,游戏编程 | 李大仁博客...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。