У меня практически нет опыта программирования на C. Но теперь мне нужно использовать немного кода C в приложении VB.net.

Перевод кода до сих пор был успешным, но я столкнулся с этим странным (по крайней мере, для меня) утверждением

j += ( i = j); 

Оба j и i - целые числа. Я искал на этом форуме и в Google, но не нашел ответа о том, что это может означать.

Немного дальше в коде C у меня есть похожий код, который выглядит как

chisq += (temp = y[i] - (aa + bb*x[i]), temp*temp);

Все переменные, кроме i, являются двойными или массивом двойников.

Пожалуйста, извините, если я допустил грамматические или орфографические ошибки.

Заранее спасибо.

Edit: спасибо за все ответы ... они очень ясны ... к сожалению, я зашел в тупик в своем преобразовании с C на VB.net ...

struct profile *p = profiles;
double uf[ARRAY_SIZE];
int i;
double u, v, s;

for (i = 1; i <= n; i++, p++) {
    if (p->drctn)
        v = phi;
    else    v = TWOPI - phi;
    u = p->xfall*TWOPI;
    uf[i] = -(a0*cos(u + v) - a1*sin(u + v));
}

Я считаю, что это невозможно перевести ... в любом случае спасибо за всю вашу прекрасную информацию !!!

0
Ben 19 Апр 2016 в 12:28

4 ответа

Лучший ответ

chisq += (temp = y[i] - (aa + bb*x[i]), temp*temp); будет оцениваться следующим образом:

operator , из temp = y[i] - (aa + bb*x[i]) и temp*temp Если он не перегружен, он будет оценивать первый аргумент, отбрасывать его, а затем оценивать второй аргумент и возвращать его.

temp = y[i] - (aa + bb*x[i]);
chisq = chisq + temp*temp;
4
Teivaz 19 Апр 2016 в 09:39

Следующий код:

j += ( i = j);

Это просто уродливый способ сказать

i = j;
j = j * 2;

Который вы также можете написать как:

i = j;
j *= 2;

Таким же образом будет оцениваться вторая операция в следующем порядке:

temp = y[i] - (aa + bb * x[i]);
chisq = chisq + (temp * temp);
3
Stefano 19 Апр 2016 в 09:40

Сначала он присваивает j значению i, а затем добавляет i к j.

Как это:

i = j;
j += i;
1
Henningsson 19 Апр 2016 в 09:32
i = j;
j += i;

Который равен:

i = j;
j *= 2; // j += i is the same as j += j which is j = j + j;

Наконец: это похоже на "уловку", но на самом деле это плохая практика из-за плохой читаемости программы.

1
i486 19 Апр 2016 в 09:35