课堂测试小结,原码补码反码
自动生成四则运算题目:
题目避免重复:
将每一题储存起来,依次遍历查重
可定制数量:
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!