C++位运算速度问题

来源:百度知道 编辑:UC知道 时间:2024/06/30 15:22:30
废话不多说

char loop=32 //也就是 00100000 第六位

int a[8],target; //现在要用上面求出的6做 target=a[6];
/**方法1*******/
int r;
for (r=0;loop>>=1;r++);
target=a[r]

/**方法2*******/
int *pa;
for (pa=a;loop<<=1;pa++);
target=*pa;

有没有更快的方法?

小弟大一,什么都不会

另外,新开辟一个空间如int x[100];是不是很耗运算时间啊?

谢谢大家了

用switch 最快 只不过代码多了点
int x[100];不费时间

位运算速度很快。所以,可以用移1位代替乘2或除2,省时。

编译后的程序都是机内数,机内码,都是2进制,不用自己操心。
target=a[6];
a[6] 属于寻址计算,按a的地址,加 6*sizeof(int)
把这个地址里的数赋到target的地址里。

for (r=0;loop>>=1;r++); -- 这里有分号,也就是循环体是空,白费时间。

你要做:
r = 6;
target=a[r];
不如直接写 target=a[6];

新开辟一个空间如int x[100]; 不费时间,只是分配空间而已。装入可执行程序时它就在数据区了。

switch (loop)
{
case 0 : target = a[0]; break;
case 1 : target = a[1]; break;
case 2 : target = a[2]; break;
case 4 : target = a[3]; break;
case 8 : target = a[4]; break;
case 16: target = a[5]; break;
case 32: target = a[6]; break;
case 64: target = a[7]; break;
default: error();
}

栈里分配空间一般来说不耗费任何时间

你的第一种方法和第二种是一样的,数据和指针在某种意义上是等价。
你要的答案:target=a[6];其它的都不用做,这样最快。

int x[100];这样不过才4*100的字节而已。目前的处理器每秒可以出几G的字节。你说你申明的那些算不算小儿科。。

温馨补充:如果你对数组长度不能掌握的话就不写。
像这样int x[];
以后你会接触到动态数据,自由分配长度的。