解释下列代码: do { tempb = rand() % 9 + 1; }while(tempb == tempa);
时间: 2024-02-15 18:42:33 浏览: 130
这段代码是一个 do-while 循环语句。其作用是生成一个随机数 tempb ,并且确保它不和之前生成的随机数 tempa 相等。
具体来说,代码中的 rand() 函数用于生成一个 0-32767 之间的随机整数,然后对其取模 9 ,再加上 1 ,就可以得到一个 1-9 之间的随机整数。这个随机数赋值给 tempb 变量。
然后使用 do-while 循环语句来判断 tempb 是否和之前生成的随机数 tempa 相等。如果相等,则重新生成一个随机数,直到生成的随机数和 tempa 不相等为止。这样就保证了 tempa 和 tempb 不相等。
最后,tempb 变量中就存储了一个 1-9 之间的随机整数,且和 tempa 不相等。
相关问题
always @(posedge clk or negedge rst_n) begin if(!rst_n) begin key_r0 <= 1'b0; key_r1 <= 1'b0; end else begin key_r0 <= key_in; key_r1 <= key_r0; end end //jump edge detection always @(posedge clk or negedge rst_n) begin if(!rst_n) begin key_tempa <= 1'b0; key_tempb <= 1'b0; end else begin key_tempa <= key_r1; key_tempb <= key_tempa; end end assign pedge = key_tempa & (!key_tempb); //posedge assign nedge = (!key_tempa) & key_tempb; //negedge
这段代码包含两个 always 块和两个 assign 语句。第一个 always 块是一个同步复位模块,当复位信号 rst_n 为低电平时,将 key_r0 和 key_r1 两个寄存器置零。当复位信号为高电平时,key_r0 寄存器的值被赋值为 key_in 输入信号的值,key_r1 寄存器的值被赋值为 key_r0 寄存器的值。因此,这个模块的作用是实现一个寄存器,用于存储 key_in 输入信号的前一次和前两次的值。
第二个 always 块实现了跳边检测,也就是检测由低电平跳变到高电平或由高电平跳变到低电平的边沿信号。当复位信号 rst_n 为低电平时,将 key_tempa 和 key_tempb 两个寄存器置零。当复位信号为高电平时,key_tempa 寄存器的值被赋值为 key_r1 寄存器的值,key_tempb 寄存器的值被赋值为 key_tempa 寄存器的值。因此,这个模块的作用是实现一个寄存器,用于存储 key_in 输入信号的前一次和前两次的值,并检测跳边信号。
第一个 assign 语句实现了跳变检测的正沿信号 pedge,即当 key_tempa 为 1 且 key_tempb 为 0 时,pedge 为 1,否则为 0。
第二个 assign 语句实现了跳变检测的负沿信号 nedge,即当 key_tempa 为 0 且 key_tempb 为 1 时,nedge 为 1,否则为 0。
public static void change(int tempA,int[] tempB){tempA=3;temp[0]=20;}public static void main(String[] args){int a =1;int [] b={10,11};change(a,b);System.out.println("a="+a+",b[0]="+b[0]);}
这段代码的输出结果为:`a=1,b[0]=20`。
这是因为在Java中,基本数据类型是按值传递的,而引用类型是按引用传递的。在`change`方法中,`tempA`是基本数据类型,传递的是它的值,所以即使在`change`方法中修改了`tempA`的值,也不会影响`main`方法中的`a`的值。而`tempB`是一个数组,传递的是它的引用,所以在`change`方法中修改了数组元素的值,会改变`main`方法中`b`数组的值。
阅读全文