*s++ = *p;这步什么意思啊?
时间: 2023-10-21 07:23:13 浏览: 41
这个操作是指将指针`s`所指向的位置赋值为指针`p`所指向的位置的值,并将指针`s`向后移动一个位置。
具体来说,`*p`表示指针`p`所指向的位置的值,而`*s++`表示先将指针`s`所指向的位置赋值为`*p`,然后将指针`s`向后移动一个位置,指向下一个位置。
相当于下面这两步操作:
```c
*s = *p;
s++;
```
这个操作常用于字符串的操作中,用来复制、拼接、截取等。
相关问题
洛谷+p1423小玉在游泳
这道题目是一道简单的数学题,可以使用循环来解决。根据题目描述,小玉第一步能游22米,接下来每一步都只能游出上一步距离的98%。因此,我们可以使用一个while循环来计算小玉游泳的总距离,直到总距离大于等于目标距离为止。在循环中,我们需要记录小玉游泳的步数,以及每一步游泳的距离。具体实现可以参考以下代码:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double n = scanner.nextDouble(); // 目标距离
double a = 22; // 第一步距离
int sum = 0; // 步数
double s = 0; // 总距离
while (s < n) {
s += a;
a *= 0.98;
sum++;
}
System.out.println(sum);
}
}
```
在上面的代码中,我们首先读入目标距离n,然后初始化第一步距离a为22,步数sum为0,总距离s为0。接下来进入while循环,每次循环中,我们将当前步数加1,将当前步的距离a加到总距离s中,然后将a乘以0.98,计算下一步的距离。当总距离s大于等于目标距离n时,循环结束,输出步数sum即可。
public void Excute() { byte[] Li=new byte[4]; byte[] Ri=new byte[4]; byte[] Xo; System.arraycopy(L0, 0, Li, 0, 4); System.arraycopy(R0, 0, Ri, 0, 4); for(int i=0;i<6;i++) { Xo=XOR(E(Ri), this.ikey[i]); Xo=XOR(P(S(Xo)),Li); Li=Ri; Ri=Xo; } Ln=Ri; Rn=Li; }代码的意思
这段代码是一个名为Excute的公有方法,它没有任何参数或返回值。该方法的主要作用是执行DES算法的加密或解密过程。
具体来说,该方法首先将初始数据块L0和R0分别存储在长度为4的byte数组Li和Ri中。然后,它使用了DES算法中的Feistel网络结构,对Ri进行了16轮的变换,每轮变换使用了一个子密钥。具体的变换过程如下:
1. 将Ri进行扩展置换E,得到一个长度为48的比特串。
2. 将E(Ri)与第i轮子密钥进行异或运算,得到一个长度为48的比特串Xo。
3. 将Xo进行S盒置换和P置换,得到一个长度为32的比特串。
4. 将P(S(Xo))与Li进行异或运算,得到一个长度为32的比特串。
5. 将Ri赋值给Li,将Xo赋值给Ri。
6. 重复1-5步,共进行16轮变换。
最后,将变换后的结果存储在对象的成员变量Ln和Rn中,其中Ln表示最后一轮变换后的Ri,Rn表示最后一轮变换后的Li。
需要注意的是,该方法中使用了多个辅助方法,包括E、S、P和XOR等,这些方法在之前的代码中已经进行了解释。另外,该方法并没有对Ln和Rn进行任何后续处理,如果需要获取加密或解密结果,需要通过调用对象的getLn和getRn方法来获取。