rev |= (n & 1) << (31 - i); n >>= 1;
时间: 2024-04-06 09:29:37 浏览: 23
这是一个位运算操作,将一个32位无符号整型数n逆序后赋值给另一个32位无符号整型数rev。具体操作为:从n的最低位开始,取出一个二进制位,然后将其左移到rev的对应位置(31-i),再将n右移一位,重复这个过程直到n的所有二进制位都被取出。最后rev就是n的逆序数。
其中“|=”是按位或赋值运算符,相当于rev = rev | ((n & 1) << (31 - i))。"&"是按位与运算符,"<<"是左移位运算符,">>"是右移位运算符。
相关问题
for (k = 0; k < logn; k++) j |= ((i >> k) & 1) << (logn - 1 - k); if (j > i) { tr = x[i]; ti = y[i]; x[i] = x[j]; y[i] = y[j]; x[j] = tr; y[j] = ti; }报错,将其更换为不会报错的代码
这段代码的作用是将 i 和 j 互换位置,其中 j 是将 i 的二进制位翻转后得到的整数。
如果你想更换为不会报错的代码,可以考虑使用一个数组 `rev` 来存储每个下标的二进制位翻转后得到的整数,然后在循环中直接使用 `rev[i]` 即可。
具体实现如下:
```c++
int rev[N];
for (int i = 0; i < n; i++) {
rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (logn - 1));
if (rev[i] > i) {
swap(x[i], x[rev[i]]);
swap(y[i], y[rev[i]]);
}
}
```
这里的 `rev[i]` 的计算方式是先将 `i` 的二进制位翻转,然后再将翻转后的结果右移一位,再将 `i` 的最低位加到最高位,就可以得到 `rev[i]` 的值了。注意在循环中判断 `rev[i]` 是否大于 `i`,如果是,则需要交换 `x[i]` 和 `x[rev[i]]`,同时也要交换 `y[i]` 和 `y[rev[i]]`。
xj<-100 buy<-110 r<-0.05 time<-0.25 up<-1.15 down<-0.88 q<-(1+r-down)/(up-down) n<-3 jg<-time/n u<-seq(0,n) u<-choose(n,u)*q^u*(1-q)^(n-u) d<-rev(u) s<-50*up^u*d^rev(u) c<-pmax(s-buy,0) for(i in n:1){ c<-exp(-r*jg)*(q*c[-1]+(1-q)*c[-length(c)]) c <- rep(0, n+1) c<-pmax(c,s-buy) } C<-c[1] cat("风险中性概率q为:", q, "\n") cat("期权的价值为:", C, "元\n")为什么c为0
在这段代码中,c被初始化为0向量,然后在循环中进行递推计算。在每次循环中,都会重新赋值c为:
```
c <- exp(-r*jg)*(q*c[-1]+(1-q)*c[-length(c)])
c <- rep(0, n+1)
c <- pmax(c,s-buy)
```
这里第二行的`c <- rep(0, n+1)`会将向量c的值全部设为0,因此之前的计算结果都会被覆盖掉,导致最后c的值仍为0,而不是正确的期权价值。
如果要在循环中不断更新c的值,可以将初始化c的语句移动到循环之外,即:
```
c <- pmax(s-buy,0)
for(i in n:1){
c <- exp(-r*jg)*(q*c[-1]+(1-q)*c[-length(c)])
c <- pmax(c,s-buy)
}
```
这样就可以正确地计算出期权的价值了。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)