课堂测试小结,原码补码反码

自动生成四则运算题目:

题目避免重复:

将每一题储存起来,依次遍历查重

可定制数量:

System.out.println("请定制生成题目个数");

int n=0;

n=in.nextInt();

for(int i=0;i<n;i++)

n手动控制题目数量进行循环

System.out.println("请定制打印每行题数");

int m=0;

m=in.nextInt();

for(int i=0,j=1;i<n;i++,j++)

if(j==m)

{

j=0;

System.out.println();

}

在上述循环中加入j变量,控制每行的行数

定制操作数的个数

System.out.println("请定制操作数个数");

int num=0;

num=in.nextInt();

for(int k=1;k<num;k++)

在上述循环中加入本循环作为嵌套,上述为题目个数,本循环为操作数个数

定制是否有乘除法

System.out.println("请定制是否有乘除法(1为有,0为没有)");

int yn=0;

yn=in.nextInt();

if(yn==1)

{

int c=random.nextInt(3);

switch(c)

{

case 0:System.out.print("+");break;

case 1:System.out.print("-");break;

case 2:System.out.print("*");break;

case 3:System.out.print("/");break;

 

}

}

else

{

int c=random.nextInt(1);

switch(c)

{

case 0:System.out.print("+");break;

case 1:System.out.print("-");break;

}

}

通过switch语句和生成随机数个数来确定是否有乘除法

定制是否有括号(随机加入)

System.out.println("请定制是否有括号(1为有,0为没有)");

int ny=0;

ny=in.nextInt();

int kuo=0;

Random random = new Random();

kuo=random.nextInt(2);

if(ny==1&&kuo==0)

System.out.print("(");

if(ny==1&&kuo==0&&k==1)

System.out.print(")");

if(ny==1&&kuo==1&&k==num-2)

System.out.print("(");

if(ny==1&&kuo==1)

System.out.print(")");

在是否生成括号的基础上,随机生成选择在前两个操作数或者后两个操作数上加括号

定制数值范围(确定操作数的取值范围)

System.out.println("请定制操作数范围:");

System.out.println("最小值:");

System.out.println("最大值:");

int min=0;

int max=0;

min=in.nextInt();

max=in.nextInt();

Random random = new Random();

int a=random.nextInt(max-min+1)+min;

根据系统random类随机生成min-max范围数字

函数实现:

private static void yusuan(int n,int m,int yn,int ny,int num,int min,int max) {

int kuo=0;

for(int i=0,j=1;i<n;i++,j++)

{

Random random = new Random();

kuo=random.nextInt(2);

int a=random.nextInt(max-min+1)+min;

if(ny==1&&kuo==0)

System.out.print("(");

System.out.print(a);

for(int k=1;k<num;k++)

{

if(yn==1)

{

int c=random.nextInt(3);

switch(c)

{

case 0:System.out.print("+");break;

case 1:System.out.print("-");break;

case 2:System.out.print("*");break;

case 3:System.out.print("/");break;

 

}

}

else

{

int c=random.nextInt(1);

switch(c)

{

case 0:System.out.print("+");break;

case 1:System.out.print("-");break;

}

}

int b=random.nextInt(max-min+1)+min;

if(ny==1&&kuo==1&&k==num-2)

System.out.print("(");

System.out.print(b);

if(ny==1&&kuo==0&&k==1)

System.out.print(")");

}

if(ny==1&&kuo==1)

System.out.print(")");

System.out.print("= ");

if(j==m)

{

j=0;

System.out.println();

}

总代码:

package 课堂测试;

 

import java.util.Random;

import java.util.Scanner;

 

public class yunsuan {

 

public static void main(String[] args) {

Scanner in =  new Scanner(System.in);

System.out.println("请定制生成题目个数");

int n=0;

n=in.nextInt();

System.out.println("请定制打印每行题数");

int m=0;

m=in.nextInt();

System.out.println("请定制是否有乘除法(1为有,0为没有)");

int yn=0;

yn=in.nextInt();

System.out.println("请定制是否有括号(1为有,0为没有)");

int ny=0;

ny=in.nextInt();

System.out.println("请定制操作数个数");

int num=0;

num=in.nextInt();

System.out.println("请定制操作数范围:");

System.out.println("最小值:");

System.out.println("最大值:");

int min=0;

int max=0;

min=in.nextInt();

max=in.nextInt();

yusuan(n,m,yn,ny,num,min,max);

}

 

private static void yusuan(int n,int m,int yn,int ny,int num,int min,int max) {

int kuo=0;

for(int i=0,j=1;i<n;i++,j++)

{

Random random = new Random();

kuo=random.nextInt(2);

int a=random.nextInt(max-min+1)+min;

if(ny==1&&kuo==0)

System.out.print("(");

System.out.print(a);

for(int k=1;k<num;k++)

{

if(yn==1)

{

int c=random.nextInt(3);

switch(c)

{

case 0:System.out.print("+");break;

case 1:System.out.print("-");break;

case 2:System.out.print("*");break;

case 3:System.out.print("/");break;

 

}

}

else

{

int c=random.nextInt(1);

switch(c)

{

case 0:System.out.print("+");break;

case 1:System.out.print("-");break;

}

}

int b=random.nextInt(max-min+1)+min;

if(ny==1&&kuo==1&&k==num-2)

System.out.print("(");

System.out.print(b);

if(ny==1&&kuo==0&&k==1)

System.out.print(")");

}

if(ny==1&&kuo==1)

System.out.print(")");

System.out.print("= ");

if(j==m)

{

j=0;

System.out.println();

}

 

 

}

 

}

 

}

 信2105-1刘梦阳 2022/9/11 21:12:42
怎么没说

晚风与海 2022/9/11 21:12:52
10

信2105-1刘梦阳 2022/9/11 21:12:58
ok

晚风与海 9:32:03
啥博客园

晚风与海 9:32:04


信2105-1刘梦阳 9:33:00


信2105-1刘梦阳 9:33:12
老师上课用的ppt上的问题

晚风与海 9:33:25
补码反码是啥

信2105-1刘梦阳 9:33:40
应该是另外出的一个问题

信2105-1刘梦阳 9:33:49
算在这1000字以内

晚风与海 9:38:04


信2105-1刘梦阳 9:38:39


信2105-1刘梦阳 9:39:04
写俩1000??

晚风与海 9:45:01


晚风与海 10:08:38
原码补码那一堆你咋写的啊

信2105-1刘梦阳 10:08:52
网上搜的

晚风与海 10:09:06
我也要

晚风与海 10:09:07
qwq

信2105-1刘梦阳 10:09:14
相关概念加点样例

信2105-1刘梦阳 10:10:03
反码、补码跟原码几个概念。

1、原码、反码、补码的概念
原码 :最高位是符号位,0代表正数,1代表负数,非符号位为该数字绝对值的二进制。

反码:正数的反码与原码一致,负数的反码是对原码按位取反,只是最高位(符号位)不变。

补码:正数的补码与原码一致,负数的补码是对原码按位取反加1,符号位不变。

例如 十进制数字:5

5=2^2+2^0 101 至少要三位数字 加上符号位 就是4位数字

原码:0101

反码:0101

补码:0101

例如 十进制数字:-5

5=2^2+2^0 101 至少要三位数字 加上符号位 就是4位数字

原码:1101

反码:1010

补码:1011

例如 将补码1011 转换为原码

补码:1011

符号位不变,数值位取反:1100

加1后得到原码:1101

补码变成原码的方式是:正数的补码与原码一致,负数的补码按位取反加1,符号位不变

反码变成原码的方式是:正数的反码与原码一致,负数的补码按位取反,符号位不变

2、原码、反码、补码 0的问题
用4位二进制原码表示0:-0=1000 +0=0000

用4位二进制反码表示0:-0=1111 +0=0000

用4位二进制补码表示0:-0=0000 +0=0000

000 --> 0

111 --> 7

3、原码、反码、补码 表示范围
n+1位数字,绝对值最大的原码是 -(2^n - 1)和 2^n - 1

n+1位数字,绝对值最大的反码是 -(2^n - 1) 和 2^n - 1

n+1位数字,绝对值最大的补码是 -2^n

例如

原码:

二进制无符号000~111 十进制0~ 7 0 ~ 2^3-1

二进制有符号0000~0111 十进制0~7 0 ~ 2^3-1

二进制有符号1111~1000 十进制-7~0 -(2^3-1) ~ 0

综上所述:4位原码的表示范围: -(2^3 - 1) ~ 2^3-1

用4位二进制原码表示的范围 1111~0111可以表示15个十进制数字 -(2^3 - 1) ~ 2^3-1

用4位二进制反码表示的范围 1000~0111可以表示15个十进制数字 -(2^3 - 1) ~ 2^3-1

用4位二进制补码表示的范围 1000~0111 可以表示16个十进制数字 -2^3 ~ 2^3-1

补码:位数一定,绝对值最大的补码是符号位是1,数值位全为0

用4位补码数字表示 -8: 1000

4位数字,绝对值最大的原码是 1111 和 0111 -7和7 -(2^3-1) 和 2^3-1

4位数字,绝对值最大的反码是 1000和 0111 -7和7

4位数字,绝对值最大的补码是 1000 -2^3 -8

对一下十进制数字排序 从小到大

-001 001 -011 011 -101

-101<-011<-001<001<011

对一下二进制数字排序 从小到大

1001 0001 1011 0011 1101

1101<1011<1001<0001<0011

4、二进制转十进制
无符号二进制 十进制 加1后的二进制 加1后十进制
1 2^1 – 1 10 2^1
11 2^2 – 1 100 2^2
111 2^3 – 1 1000 2^3
1111 2^4 – 1 10000 2^4
111……111 n个1 2^n – 1 1000……000 n个0 2^n
将原码:10101,01001 转成十进制数

10101 = -1*2^2 + 1*2^0

01001 = 1*2^3 + 1*2^0

posted @   代不动码  阅读(113)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示