一、阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原码这几个概念,然后编写示例程序,对正数、负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示的。

1. 原码

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:

[+1]原 = 0000 0001

[-1]原 = 1000 0001

第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:

[1111 1111 , 0111 1111]

[-127 , 127]

原码是人脑最容易理解和计算的表示方式.

2. 反码

反码的表示方法是:

正数的反码是其本身

负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

[+1] = [00000001]原 = [00000001]反

[-1] = [10000001]原 = [11111110]反

可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.

3. 补码

补码的表示方法是:

正数的补码就是其本身

负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

[+1] = [00000001]原 = [00000001]反 = [00000001]补

[-1] = [10000001]原 = [11111110]反 = [11111111]补

对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.

二、课堂测试1:像二柱子那样,花二十分钟写一个能自动生成30道小学四则运算题目的 “软件”。

package calculate;

public class calculate {

public static void main(String[] args) {

// TODO Auto-generated method stub

}

}

class  Calculat{

public static void main(String[] args) {

for(int i=1;i<=30;i++)

{

System.out.print(i+"、");

int x=(int)(Math.random()*100);

System.out.print(x);

int operator=(int)(Math.random()*4+1);

if(operator==1)

{

System.out.print("+");

}

else if(operator==2)

{

System.out.print("-");

}

else if(operator==3)

{

System.out.print("*");

}

else if(operator==4)

{

System.out.print("/");

}

int y=(int)(Math.random()*100);

if(x<y)

{

int temp;

temp=x;

x=y;

y=temp;

}

System.out.println(y);

}

}

}

三、在“二”的基础上进行课堂测试2: 1、题目避免重复;2、可定制(数量/打印方式);3、可以控制下列参数: 是否有乘除法、是否有括号、 数值范围、加减有无负数、除法有无余数、否支持分数 (真分数, 假分数, …)、是否支持小数 (精确到多少位)、打印中每行的间隔可调整。

package calculate;

import java.util.Random ;

import java.util.Scanner;

import java.lang.reflect.Array;

import java.util.LinkedList;

import java.util.List;

public class FourOperations1

{

public static void main(String[] ages)

{

while(1>0)

{

System.out.print("\n请选择要求:"

+"\n  是否有乘除法;(True/False)"

+"\n  是否有括号(最多可以支持十个数参与运算)(True/False);"

+"\n  数值范围(True(1~10)/False(1~100));"

+"\n  加减乘除有无负数(True/False);"

+"\n  除法有无余数(True/False);");

Scanner sc = new Scanner(System.in);

Boolean[] a=new Boolean[5];

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

{

a[i]=sc.nextBoolean();

}

//sc.close();

System.out.println("请输入要出题的个数");

Scanner N = new Scanner(System.in);

int index=N.nextInt();

//N.close();

for(int ii=0;ii<index;ii++)

{

if(a[1]==false)

{

int a1=RandomNum(100),a2=RandomNum(100);

int sign=RandomNum(4);

if(sign==3&&a[4]==false)

{

a1=(a1%15)*(a2%10);

System.out.print("\n"+a1);

PrintSign(sign);

System.out.print(a2%10+"  =");

continue;

}

if(a[0]==false)

{

if(a[3]==false)

{

if(a[2]==false)

{

System.out.print("\n"+a1);

PrintSign(sign%2);

System.out.print(a2+"  =");

}

else if(a[2]==true)

{

System.out.print("\n"+a1%10);

PrintSign(sign%2);

System.out.print(a2+"  =");

}

}

else if(a[3]==true)

{

int ssign=RandomNum(2);

if(ssign==0){

a1=-a1;

}

if(a[2]==false)

{

System.out.print("\n"+a1);

PrintSign(sign%2);

System.out.print(a2+"  =");

}

else if(a[2]==true)

{

System.out.print("\n"+a1%10);

PrintSign(sign%2);

System.out.print(a2%10+"  =");

}

}

}

else if(a[0]==true)

{

if(a[3]==false)

{

if(a[2]==false)

{

System.out.print("\n"+a1);

PrintSign(sign);

System.out.print(a2+"  =");

}

else if(a[2]==true)

{

System.out.print("\n"+a1%10);

PrintSign(sign);

System.out.print(a2%10+"  =");

}

}

else if(a[3]==true)

{

int ssign=RandomNum(2);

if(ssign==0){

a1=-a1;

}

if(a[2]==false)

{

System.out.print("\n"+a1);

PrintSign(sign);

System.out.print(a2+"  =");

}

else if(a[2]==true)

{

System.out.print("\n"+a1%10);

PrintSign(sign);

System.out.print(a2%10+"  =");

}

}

}

}

else if(a[1]==true)

{

int size=RandomNum(9);

int[] array=new int[size*2+4];

if(a[0]==false){

for(int i=0;i<=size;i++){

array[i]=RandomNum(2);

}

}

else if(a[0]==true){

for(int i=0;i<=size;i++){

array[i]=RandomNum(4);

}

}

if(a[2]==true){

for(int i=size+1;i<=size*2+2;i++){

array[i]=RandomNum(70)+4;

}

}

else if(a[2]==false){

for(int i=size+1;i<=size*2+2;i++){

array[i]=RandomNum(96)+4;

}

}

if(a[3]==true){

for(int i=size+1;i<=size*2+2;i++){

int ssign=RandomNum(2);

if(ssign==0){

array[i]=-array[i];

}

}

}

LinkedList<Node> nodeList = new LinkedList<Node>();

for(int nodeIndex=0;nodeIndex<array.length;nodeIndex++){

nodeList.add(new Node(array[nodeIndex]));

}

creatBinTree(array,nodeList);

Node root = nodeList.get(0);

inOrderTraverse(root);

System.out.println("  =  ");

}

}

}

}

public static int RandomNum(int i)

{

Random a=new Random();

int a1=a.nextInt (i);

return a1;

}

public static void PrintSign(int sign)

{

if(sign==0){

System.out.print("  +  ");

}

else if(sign==1){

System.out.print("  -  ");

}

else if(sign==2){

System.out.print("  *  ");

}

else if(sign==3){

System.out.print("  /  ");

}

else

System.out.print(sign);

}

public static class Node

{

Node leftchild;

Node rightchild;

int data;

Node(int newData){

leftchild=null;

rightchild=null;

data=newData;

}

}

public static void creatBinTree(int array[],LinkedList<Node> nodeList){

for(int parentIndex=0;parentIndex<array.length/2-1;parentIndex++){

nodeList.get(parentIndex).leftchild = nodeList

.get(parentIndex * 2 + 1);

nodeList.get(parentIndex).rightchild = nodeList

.get(parentIndex * 2 + 2);

}

}

public static void inOrderTraverse(Node node) {

if (node == null)

return;

if (node.leftchild != null) {

System.out.print("(");

}

inOrderTraverse(node.leftchild);

PrintSign(node.data );

inOrderTraverse(node.rightchild);

if (node.rightchild != null) {

System.out.print(")");

}

}

}

《JAVA语言》课问题汇总的更多相关文章

  1. 快乐编程大本营【java语言训练班】 6课:用java的对象和类编程

    快乐编程大本营[java语言训练班] 6课:用java的对象和类编程 第1节. 什么是对象和类 第2节. 对象的属性和方法 第3节. 类的继承 第4节. 使用举例:创建类,定义方法,定义属性 第5节. ...

  2. 快乐编程大本营【java语言训练班】第5课: java的数组编程

    快乐编程大本营[java语言训练班]第5课: java的数组编程 第1节. 声明数组变量 第2节. 创建数组对象 第3节. 访问数组元素 第4节. 修改数组元素 第5节. 多维数组 学习地址如下:ht ...

  3. 《快乐编程大本营》java语言训练班-第4课:java流程控制

    <快乐编程大本营>java语言训练班-第4课:java流程控制 第1节. 顺序执行语句 第2节. 条件分支语句:if条件语句 第3节. 条件分支语句:switch 条件语句 第4节. 条件 ...

  4. 《快乐编程大本营》java语言训练班 2课:java的变量

    <快乐编程大本营>java语言训练班 2课:java的变量 1变量介绍 2变量分类,数值变量 3变量分类-字符串变量 4变量分类-布尔变量 5变量分类-对象 http://code6g.c ...

  5. 【软考2】Java语言的基本知识汇总

    导读:现在对于java这一模块,还没有相应的项目经验,只是通过各种类型的资料,对java有一个面上的了解.现在,对此做一个罗列总结,在以后的学习过程中,逐步完善! 一.语言的发展 1.1,机器语言 在 ...

  6. Java语言程序设计-助教篇

    1. 给第一次上课(软件工程)的老师与助教 现代软件工程讲义 0 课程概述 给学生:看里面的第0个作业要求 2. 助教心得 美国视界(1):第一流的本科课堂该是什么样?(看里面的助教部分) 助教工作看 ...

  7. Java语言中的面向对象特性总结

    Java语言中的面向对象特性 (总结得不错) [课前思考]  1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类?  2. 面向对象编程的特性有哪三个?它们各自又有哪些特性?  3. 你知 ...

  8. 20145205 java语言实现数据结构实验一

    数据结构实验要求 综合类实验设计3 已知有一组数据a1a2a3a4--anb1b2b3b4--bm,其中ai均大于bj,但是a1到an和b1到bm不是有序的,试设计两到三个算法完成数据排序,且把bj数 ...

  9. Java语言基础

    Java 语言是面向对象的程序设计语言,Java 程序的基本组成单元是类,类体中又包括属性与方法两部分.每一个应用程序都必须包含一个main()方法,含有main()方法的类成为主类. 一.Java ...

  10. JAVA语言学校的危险性

    Java语言学校的危险性(译文) 作者: 阮一峰 日期: 2008年12月 7日 下面的文章是More Joel on Software一书的第8篇. 我觉得翻译难度很大,整整两个工作日,每天8小时以 ...

随机推荐

  1. Java中的集合Collections工具类(六)

    操作集合的工具类Collections Java提供了一个操作Set.List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了将集 ...

  2. springboot 详解RestControllerAdvice(ControllerAdvice)(转)

    springboot 详解RestControllerAdvice(ControllerAdvice)拦截异常并统一处理简介 @Target({ElementType.TYPE}) @Retentio ...

  3. DNS服务基础

    DNS服务器的功能 – 正向解析:根据注册的域名查找其对应的IP地址 – 反向解析:根据IP地址查找对应的注册域名(不常用) NS(声明DNS记录) A(正向解析记录) CNAME(解析记录别名) 安 ...

  4. JS 中获取服务器时间的注意点

    在通过js获取服务器时间时,遇到了小小的问题,但造成的影响挺大的,所以写出来提醒大家,在获取服务器时间时一定要细心要多测试多验证. js 中使用以下方法获取服务器时间时要注意两点: 1.xhr.ope ...

  5. Huffman树、霍夫曼编码

    Huffman树指的是带权路径长度WPL最小的二叉树 WPL=路径*权值 Huffman常用于压缩编码,正常传输ABCDEF这些字母需要3位二进制树来描述,但由于一篇文章中ABCDEF这些字母出现的概 ...

  6. HDU6223 Infinite Fraction Path bfs+剪枝

    Infinite Fraction Path 这个题第一次看见的时候,题意没搞懂就没做,这第二次也不会呀.. 题意:第i个城市到第(i*i+1)%n个城市,每个城市有个权值,从一个城市出发走N个城市, ...

  7. PCIe/NVMe Soft Protocol Analyzer - 惊天发现

    最近在看一些协议方面的东西,刚刚接触很多东西不懂.为了尽快熟悉,打算搭建一套系统,包括上层主机和下层SSD. 既然是协议,那就需要硬啃spec.但是俺是懒人一个,想找个便捷方式快速熟悉.这就想到了协议 ...

  8. Redis evalsha 命令

    相当于根据sha1校验码,执行缓存在服务器的一段代码. 这个命令的使用方法类似eval--参数的传入方式等等 使用需要redis版本 >= 2.6.0 语法 *> evalsha sha1 ...

  9. Codeforces 601B. Lipshitz Sequence(单调栈)

    Codeforces 601B. Lipshitz Sequence 题意:,q个询问,每次询问给出l,r,求a数组[l,r]中所有子区间的L值的和. 思路:首先要观察到,斜率最大值只会出现在相邻两点 ...

  10. CodeForces Good Bye 2016

    A题,水题略过. B题,也水,但是想复杂了.只要运动超出[0,20000]的范围就算不可能了. C题,我自己的方法是解不等式,然后取最大的答案即可.代码如下: #include <stdio.h ...