我正在为一个非常有限的系统编写一些代码,其中mod运算符非常慢.在我的代码中,模数需要每秒使用大约180次,并且我认为尽可能地删除它会显着提高代码的速度,因为现在我的主循环的一个循环不会在1/60的情况下运行应该是第二个.我想知道是否有可能仅使用乘法和除法可能的位移来重新实现模数.所以这是我目前在c ++中的代码(如果我可以使用汇编执行模数,那就更好了).如何在不使用除法或乘法的情况下删除模数?
while(input > 0)
{
out = (out << 3) + (out << 1);
out += input % 10;
input = (input >> 8) + (input >> 1);
}
Run Code Online (Sandbox Code Playgroud)
编辑:其实我意识到我需要每秒超过180次.看作输入值可以是一个非常大的数字,最多40位数.
我有一个动态分配的float数组,我需要将此数组作为参数传递给三个不同的函数,但每个函数需要获得不同的数组范围.有没有什么方法可以将带有元素0到23的数组发送到一个函数,将元素24到38发送到另一个函数,将元素39到64发送到第三个函数.
在某些语言中(比如python,我认为)你可以这样做:
somefunction(my_array[0:23]);
somefunction(my_array[24:38]);
somefunction(my_array[39:64]);
Run Code Online (Sandbox Code Playgroud)
但是我使用的是c ++,我不知道在c ++中有什么方法可以做到这一点.
有人知道怎么做这个吗?
somefunction(); 是一个API函数,所以我不能修改它所需的参数.
所以我正在用C++编写一个用于MS-DOS的游戏,我还包括一些用于速度的内联汇编.这个特殊的代码块会将一个星形画入视频存储器(0A000h).我的代码的问题是它只绘制了dh所设置的任何颜色的一个像素.据我所知mov dx,00007h相当于将dh设置为0,dl设置为7.有什么问题?
每行旁边都注释了等效的C/C++代码(或者至少是我的意图).我的编译器是turbo C++ 3.0.我试图只使用8086/8088指令.
另外我知道MS-DOS有多老,所以不要告诉我为更新的编译器/操作系统编写代码.为dos编写代码是我的一种爱好.
pixelOffset = x + (y << 6) + (y << 8);
_asm {
mov ax, WORD PTR pixelOffset
mov di, ax
mov ax, 0A000h ;pointer to the video memory
mov es, ax
mov dx, 00007h ;indexed color 00 and 07
mov cx, 0000Fh ;indexed color white 0F
add ax, 2 ;pixelOffset += 2;
mov es:[di], dh ;videomem[pixelOffset] = BLACK;
add ax, 319 ;pixelOffset += 319;
mov es:[di], dh ;videomem[pixelOffset] = BLACK;
add ax, 1 …Run Code Online (Sandbox Code Playgroud) 嗨我正在为嵌入式系统实现一些定点数学的东西,我正在尝试将两个16.16定点数相乘而不创建一个64位临时数.到目前为止,我提出的代码生成的指令最少.
int multiply(int x, int y){
int result;
long long temp = x;
temp *= y;
temp >>= 16;
result = temp;
return result;
}
Run Code Online (Sandbox Code Playgroud)
这段代码的问题在于它使用了一个临时的64位整数,这似乎会产生错误的汇编代码.我正在尝试制作一个使用两个32位整数而不是64位整数的系统.有人知道怎么做吗?
考虑这些c ++片段:
foo.h中:
class foo
{
bar myobj;
};
Run Code Online (Sandbox Code Playgroud)
bar.h:
class bar
{
foo *yourobj;
};
Run Code Online (Sandbox Code Playgroud)
其他档案:
#include "foo.h" //because foo.h is included first bar will not be defined in foo.h
#include "bar.h"
foo container;
bar blah;
Run Code Online (Sandbox Code Playgroud)
我知道我没有费心去编写构造函数,但是你得到了这个想法.有人知道解决这种情况的方法吗?