• 关于

    加减乘除

    的搜索结果

问题

如何用科学计数法实现加减乘除运算? C语言问题

DM。 2020-05-27 15:57:18 3 浏览量 回答数 1

问题

java中加减乘除怎么写

云计算小粉 2019-12-01 19:56:48 863 浏览量 回答数 1

回答

对数学基础要求不是很高,基本的会加减乘除就可以了。

小旋风柴进 2019-12-02 01:22:15 0 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

问题

如何用计算器计算二进制数的运算

知与谁同 2019-12-01 20:18:37 506 浏览量 回答数 4

回答

加减乘除是有序的,顺序乱了结果就不一样,线程是可以并发执行的,你非要用并发去执行有序的东西,只能是把几个加号拆开执行

蔡宝 2019-12-02 02:38:29 0 浏览量 回答数 0

问题

C语言学完后学什么?数据结构还是数据库

a123456678 2019-12-01 20:27:12 1114 浏览量 回答数 1

回答

在java里面位运算你可以看下Integer类中的几个方法,几乎大部分都是用的位运算,因为位运算是在硬件层面就可以直接计算的所以更快,如果采用简单的迭代和加减乘除的话效率不在一个层级

落叶梧桐雨 2019-12-02 00:31:27 0 浏览量 回答数 0

回答

苹果手机的计算器本身并不支持二进制的加减乘除运算。你可下载别的高级的计算器APP,也许有支持的。-------------------------除2取余法

一键天涯 2019-12-02 01:28:44 0 浏览量 回答数 0

回答

你说的应该是二进制数的算术运算吧。 二进制数的算术运算非常简单,它的基本运算是加法。在计算机中,引入补码表示后,加上一些控制逻辑,利用加法就可以实现二进制的减法、乘法和除法运算。 (1)二进制的加法运算 二进制数的加法运算法则只有四条:0+0=0 0+1=1 1+0=1 1+1=10(向高位进位) 例:计算1101+1011的和 由算式可知,两个二进制数相加时,每一位最多有三个数:本位被加数、加数和来自低位的进位数。按照加法运算法则可得到本位加法的和及向高位的进位。 (2)二进制数的减法运算 二进制数的减法运算法则也只有四条: 0-0=0 0-1=1(向高位借位) 1-0=1 1-1=0 例:计算11000011 00101101的差 由算式知,两个二进制数相减时,每一位最多有三个数:本位被减数、减数和向高位的借位数。按照减法运算法则可得到本位相减的差数和向高位的借位。 (3)二进制数的乘法运算 二进制数的乘法运算法则也只有四条: 0*0=0 0*1=0 1*0=0 1*1=1 例:计算1110×1101的积 由算式可知,两个二进制数相乘,若相应位乘数为1,则部份积就是被乘数;若相应位乘数为0,则部份积就是全0。部份积的个数等于乘数的位数。以上这种用位移累加的方法计算两个二进制数的乘积,看起来比传统乘法繁琐,但它却为计算机所接受。累加器的功能是执行加法运算并保存其结果,它是运算器的重要组成部分。 (4)二进制数的除法运算 二进制数的除法运算法则也只有四条: 0÷0=0 0÷1=0 1÷0=0(无意义) 1÷1=1 例:计算100110÷110的商和余数。 由算式可知,(100110)2÷(110)2得商(110)2,余数(10)2。但在计算机中实现上述除法过程,无法依靠观察判断每一步是否“够减”,需进行修改,通常采用的有“恢复余数法”和“不恢复余数法”,这里就不作介绍了。 二进制加减乘除和十进制的加减乘除类似,比如 求 (1110)2 乘(101)2 之积 解: ???1 1 1 0 × ?? 1 0 1 ----------------------- ??? 1 1 1 0 ?? 0 0 0 0 ?1 1 1 0 ------------------------- 1 0 0 0 1 1 0 (这些计算就跟十进制的加或者乘法相同,只是进位的数不一样而已,十进制的是到十才进位这里是到2就进了)

小旋风柴进 2019-12-02 01:28:33 0 浏览量 回答数 0

回答

非常不错,感谢分享###### if(!r){ complain(); exit(1); } 这样不好。 ###### 7.5 除法运算速度大大慢于移位。 -------------------------------------------------------- 加减乘除没有移位快,这个太正常了!! 根本不是缺陷! ######还没看过。话说能有多少人用得到这本书讲的问题?###### 引用来自“大大明”的评论 7.5 除法运算速度大大慢于移位。 -------------------------------------------------------- 加减乘除没有移位快,这个太正常了!! 根本不是缺陷! 陷阱。######p=&a; 这个在4.8.2上报错,这个是你定义p的类型错了吧。左值 = 右值 怎么会出错呢?######赞,很显然,你用心了。

爱吃鱼的程序员 2020-06-04 15:57:08 0 浏览量 回答数 0

问题

大家谁知道 pg上现成的 数字字符串表达式求值 的函数,实现 加减乘除四则运算 的就可以?举例 实现 '1+2+3*2' = 9 , '2-5+7' = 4 这样的效果

我叫石头 2019-12-01 19:23:20 506 浏览量 回答数 1

问题

如何制作 JAVA 简易计算器

DM。 2020-05-27 10:12:33 3 浏览量 回答数 1

问题

ffmpeg读取视频文件的文件头是怎么一回事?请能具体说一下:报错

kun坤 2020-06-08 11:05:46 2 浏览量 回答数 1

回答

unsigned int和int运算,加减乘除也好,小于大于也好,都是int转unsigned int。转换方式是底层数据不变,改变解释方式。(csapp第二章) b是错的 str虽然能当指针用,但在&和sizeof两个操作符下它是数组 所以说不能说完全相同c也是错的 str的大小是20 但是字符串长度是5 数组大小是定义中的大小,但是字符串长度是strlen结果中的长度

西秦说云 2019-12-02 02:41:27 0 浏览量 回答数 0

问题

PHP之基本运算符

龙吟风 2019-12-01 21:05:46 1266 浏览量 回答数 0

回答

为什么要用整形? 用 decimal 字段类型 不行吗? 如果涉及到计算,为了尽量保持最大的精确度,可以使用PHP 的中的 BC 数学 函数。注意,目前,浮点数在计算机中应该是无法完全精确存储的,只能最大限度。除非,你从数据库读取或从外部如GET参数获取的浮点数。在实际的项目中,如果商品价格等 涉及到加减乘除运算时,也会按照一定约定一些规则进行取舍。 比如采用:四舍五入、向上递增、银行家舍入等等。

蛮大人123 2019-12-02 01:52:41 0 浏览量 回答数 0

回答

没有数学基础,是要看没有到什么程度,如果连加减乘除都不会,那显然是不行的。那你不可能理解时间,空间复杂度的计算等知识,也就无从判定一个算法性能的优劣。更别提算法的选择和改进了。 如果数学能够达到高中的毕业水平,数据结构与算法的学习基本是无障碍的。 数据结构与算法的学习更多的是一种逻辑思维的学习,和数学的很多思维方式不完全相关,但又有其相关性。所以学好数学对学习数据结构和算法肯定是有帮助的。 如果基础不是太差,边学数据结构边学数学也是来得及的。

知与谁同 2019-12-02 01:22:06 0 浏览量 回答数 0

回答

1、需要学习数学知识。 2、简单地说,二进制就是只有两个数符的数数方法。 3、先学会怎么在二进制下数数,然后去理解: 一般的十进制的数数:1 2 3 4 5 6 7 8 对应的二进制的数数:1 10 11 100 101 110 111 1000 你能看懂上面的规律吗。在二进制中,没有2(没有比1大的数符),当比1再大时,就得向前进位了。如果你能看懂上面的数数规则,你就能学会二进制,否则,你就学不会。 至于更多的计算,比如加减乘除等,都是在这个“看懂”的基础上进行延升的,你可以“参照”十进制的计算方法去算。

马铭芳 2019-12-02 01:28:13 0 浏览量 回答数 0

回答

自动拆箱可以说的东西还挺多,也有一些需要注意的地方。首先讲一点,所谓拆箱,就是把包装类 Byte,Short,Character,Integer,Long,Float,Double,Boolean 转为基础类型 byte,short,char,int,long,float,double,boolean 。而所谓的自动拆箱,就是自动将包装类转为基础类型。先来个手动转换包装类到基础类型,代码如下:int a=Integer.valueOf("12");再来个自动拆箱,代码如下:Integer a= 1;int c = a + 2;这时候,Integer a 会被自动拆箱为 int a。为什么要对 Integer 进行拆箱呢?因为 Integer 是对象,对象时无法进行加减乘除,只有基础数据类型可以。

饭娱咖啡 2019-12-02 01:39:36 0 浏览量 回答数 0

问题

关于C++四则运算器制作的问题,求各位大神支招.......

a123456678 2019-12-01 20:28:25 922 浏览量 回答数 1

问题

JDK

琴瑟 2019-12-01 21:46:21 2216 浏览量 回答数 0

回答

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。 算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。 形式化算法的概念部分源自尝试解决希尔伯特提出的判定问题,并在其后尝试定义有效计算性或者有效方法中成形。这些尝试包括库尔特·哥德尔、Jacques Herbrand和斯蒂芬·科尔·克莱尼分别于1930年、1934年和1935年提出的递归函数,阿隆佐·邱奇于1936年提出的λ演算,1936年Emil Leon Post的Formulation 1和艾伦·图灵1937年提出的图灵机。即使在当前,依然常有直觉想法难以定义为形式化算法的情况。 一,数据对象的运算和操作:计算机可以执行的基本操作是以指令的形式描述的。一个计算机系统能执行的所有指令的集合,成为该计算机系统的指令系统。一个计算机的基本运算和操作有如下四类: 1,算术运算:加减乘除等运算 2,逻辑运算:或、且、非等运算 3,关系运算:大于、小于、等于、不等于等运算 4,数据传输:输入、输出、赋值等运算 二,算法的控制结构:一个算法的功能结构不仅取决于所选用的操作,而且还与各操作之间的执行顺序有关。 希望我能帮助你解疑释惑。

祁同伟 2019-12-02 01:23:46 0 浏览量 回答数 0

问题

算法题:怎么区分互不相同的<a, b>数对,hash还是?

a123456678 2019-12-01 19:45:41 1011 浏览量 回答数 1

回答

一、算法应该具有的五个特征: 1.有穷性 算法的有穷性是指算法必须能在执行有限个步骤之后终止; 2.确切性 算法的每一步骤必须有确切的定义; 3.输入项 一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件; 4.输出项 一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的; 5.可行性 算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)。 分类 算法可大致分为基本算法、数据结构的算法、数论与代数算法、计算几何的算法、图论的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法,厄米变形模型,随机森林算法。 二、算法可以宏泛的分为三类: 1.有限的,确定性算法 这类算法在有限的一段时间内终止。他们可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。这类算法得出的结果常取决于输入值。 2.有限的,非确定算法 这类算法在有限的时间内终止。然而,对于一个(或一些)给定的数值,算法的结果并不是唯一的或确定的。 3.无限的算法 是那些由于没有定义终止定义条件,或定义的条件无法由输入的数据满足而不终止运行的算法。通常,无限算法的产生是由于未能确定的定义终止条件。 拓展资料: 算法的要素: 一,数据对象的运算和操作: 计算机可以执行的基本操作是以指令的形式描述的。一个计算机系统能执行的所有指令的集合,成为该计算机系统的指令系统。一个计算机的基本运算和操作有如下四类: 1,算术运算:加减乘除等运算 2,逻辑运算:或、且、非等运算 3,关系运算:大于、小于、等于、不等于等运算 4,数据传输:输入、输出、赋值等运算[1] 二,算法的控制结构: 一个算法的功能结构不仅取决于所选用的操作,而且还与各操作之间的执行顺序有关。

沉默术士 2019-12-02 01:18:00 0 浏览量 回答数 0

回答

数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,"正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚."(摘自<<数学发展史>>有空大家可以看看哦~,很有意思的).为了能方便的与二进制转换,就使用了十六进制(2 4)和八进制(23).下面进入正题. 数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为 (-127~-0 +0~127)共256个. ? 有了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits ( 1 )?10-? ( 1 )10?=? ( 1 )10?+ ( -1 )10?= ?( 0 )10 (00000001)原?+ (10000001)原?= (10000010)原?= ( -2 )?显然不正确. ? 因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算: ?( 1 )10?-? ( 1 )?10=? ( 1 )?10+ ( -1 )?10= ?( 0 )10 ?(00000001)?反+ (11111110)反?=? (11111111)反?=? ( -0 ) ?有问题. ( 1 )10?-? ( 2)10?=? ( 1 )10?+ ( -2 )10?= ?( -1 )10 (00000001)?反+ (11111101)反?=? (11111110)反?=? ( -1 )?正确 问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大). 于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0),所以补码的表示范围为: (-128~0~127)共256个. 注意:(-128)没有相对应的原码和反码, (-128) = (10000000) ?补码的加减运算如下: ( 1 )?10-? ( 1 )?10=? ( 1 )10?+ ( -1 )10?= ?( 0 )10 (00000001)补?+ (11111111)补?=? (00000000)补?= ( 0 )?正确 ( 1 )?10-? ( 2)?10=? ( 1 )10?+ ( -2 )10?= ?( -1 )10 (00000001)?补+ (11111110)?补=? (11111111)补?= ( -1 ) ?正确 ?? 所以补码的设计目的是: ???? ⑴使符号位能与有效值部分一起参加运算,从而简化运算规则. ⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计 ? 所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码。看了上面这些大家应该对原码、反码、补码有了新的认识了吧。

游客886 2019-12-02 01:28:34 0 浏览量 回答数 0

回答

这道题的题目是 实现带有括号的四则运算。输入是一个带有括号的四则运算表达式,输出是计算得出的正确计算结果。例如:输入:123+213-6734+345/2345*(34+34-345+245+567)回车,然后程序计算得出结果为:359183###### #include<stdio.h> /库文件包含/ #include<string.h> /用于字符串操作/ #include<stdlib.h> /用于exit函数/ /************************************************************************ int check(char *c) 输入参数: char c: 输入的字符串 返回参数: 0:字符串中有不符合规定的字符 1: 字符串字符符合规定,没有不符合规定的字符. 功能: 检查字符串中有否除了 0-9, +,-,,/,(,),之外的其他字符, 如果有,则返回0, 表示出现错误。 若没有,则返回1,表式字符串符合规定。 ************************************************************************/ int check(char *c) { int k=0; while(*c!='\0') {   if((*c>='0' && *c<='9') || *c=='+' ||    *c=='-' || c=='' || *c=='/' ||    *c=='.' || *c=='(' ||  *c==')' )   {   }   else   {    printf("input error, there have the char not the math expression char!\n");    return 0;   }   if(*c=='(')    k++;   else if(*c==')')    k--;   c++; } if(k!=0) {   printf("input error, there is not have correct bracket '()'!\n");   return 0; } return 1; } /************************************************************************** void  move(char *f, double *s,int p) 输入参数: char *f : 运算符数组 double s: 数值数组 int p:  当前运算符数组位置。 返回参数: 无 功能: 将当前已经完成运算的运算符消去,同时将数值数组的位置调整以进行下一次运算。 传入值p若为3 则当前符号的数组位置为3. f[3]=f[3+1].......f[len-2]=f[len-1]  f[len-1]='\0'; s[i]=s[i+1].......s[len-1]=s[len]  因为数值比运算符多一个。 **************************************************************************/ void  move(char *f, double s,int p)  { int i=0,len=strlen(f); for(i=p; i<len; i++)   /将已经运算过的符号,空出来的位置用后面的符号来填充,/      {      /即把乘和除号的位置用后面的加和减号填充/   f[i]=f[i+1];   s[i]=s[i+1]; } s[i]=s[i+1]; f[len-1]='\0'; } /************************************************************************ double convnum(char *c) 输入参数: char c :由数字和小数点组成的字符,用以转换成double型的数值。 返回参数: num:返回转换好的值。 功能: 将输入的字符串先将其小数点以前的部分复制到temp[]数组中, 若有小数点,则将小数点之后的数值,也就是小数部分先进行计算,值存入num中 计算完成后,再对整数部分进行计算,值加上小数部分的值,存入num中。 ***********************************************************************/ double convnum(char *c) { double num=0.0; double a=1.0; int i=0,p=0,len=0; char temp[100]; int tempi=0; int start=0; int f=1;   /正负符号指示器,若为1则为正数,为-1,此数为负数/ len=strlen©; if(c[0]=='-') {   start=1;   f=-1; } for(i=start; i<len; i++)   {   if(c[i]=='.')    {    p=i;    break;    }   temp[tempi++]=c[i];  /将整数部分复制到temp[]中/   } temp[tempi]='\0'; if(p!=0) {   for(i=p+1;i<len;i++) /将小数部分计算出来/    {    if(c[i]=='.')  /如果有多余的小数点,则表示输入错误/    {     printf("there is more that one dot '.' in number!error!\n");     exit(0);    }    a=a0.1;    num+=(a(c[i]-48));    } } a=1.0; len=strlen(temp);           /计算整数部分/ for(i=len-1;i>=0; i--)   {   num=num+(a*(temp[i]-48));   a*=10;   } num=num*f; return num; } /************************************************************************ double good(char *c) 输入参数: char c :即将进行运算的字符串型数学表达式。如3.5+(23/5) 返回参数: s[0]:计算结果将放入s[0]中 功能: 将输入的字符串中的数字分别调用convnum(char *c)函数进行数值变换,再将其依 次存入doulbe s[i]中,将加减乘除运算符依次存入字符串符号数组 char f[i]中, 然后如果遇到括号,则将括号内的字符串存入另一字符数组中,然后用此 good(char c) 递归函数进行递归运算。 然后根据先乘除,后加减的顺序对已 存入数组的数值根 据存入字符串符号数组的运算符进行运算。结果存入s[0]中。 返回最终结果。 ***********************************************************************/ double good(char c)  /可递归函数/ {      /取得数值字符串,并调用convnum转换成double/ char g[100],number[30];  /g,保存当前的表达式串,number保存一个数的所有字符/ char f[80]; /保存所有的符号的堆栈/ int fi=0; /保存符号的位置指针/ double s[80]; /保存当前所有的数的一个堆栈/ int si=0; /保存数字位置指针/ int k=0; / 若k=1则表示有一对括号/ int num=0,i=0; /num保存新括号内的字符数,i 保存number里的字符位置/ int cc=0; /乘除符号数量/ int jj=0; /加减符号数量/ while(*c!='\0')/当p==1 和k==0时,表示已经把括号里的内容全部复制到g[100]中了/   {   k=0;   num=0;     switch(c)    {    case '+':   /当前字符为+-乘除时则表示/    case '-':    case '':    case'/':     f[fi++]=*c;     if(c=='' || c=='/')      cc++;     else      jj++;     if((c-1)!=')')     {      number[i]='\0';      i=0;/完成一个数字的复制,其位置指针i=0/          s[si++]=convnum(number);     }     break;    case'(':   /有括号,则将当前括号作用范围内的全部字符保存,作为/     k++; /一个新的字符表达式进行递归调用good函数计算。/     while(k>0)      {      c++;      g[num]=*c;      num++;      if(*c==')')       {       k--;       }      else if(*c=='(')       {       k++;       }      }     g[num-1]='\0';     num=0;/完成一个括号内容的复制,其位置指针num=0/     s[si++]=good(g);     break;    default:     number[i++]=c;         if((c+1)=='\0')     { number[i]='\0';      s[si++]=convnum(number);     }     break;    }     c++;   } f[fi]='\0'; i=0; while(cc>0) {   switch(f[i])   {   case '*': cc--;      s[i+1]=s[i]*s[i+1];      move(f,s,i);      break;   case '/': cc--;      s[i+1]=s[i]/(float)s[i+1];      move(f,s,i);      break;   default:      i++;      break;   } } i=0; while(jj>0) {   switch(f[i])   {   case '+': s[i+1]=s[i]+s[i+1];      jj--;      move(f,s,i);      break;   case '-': s[i+1]=s[i]-s[i+1];      jj--;      move(f,s,i);      break;   default:      printf("operator error!");      break;   } } return s[0]; } void main() { char str[100]; double sum=0; int p=1; while(1) {   printf("enter expression: enter 'exit' end of program\n");   scanf("%s",str);   p=strcmp(str,"exit");   if(p==0)    break;   p=check(str);   if(p==0)    continue;   sum=good(str);   printf("%s=%f",str,sum);   printf("\n"); } printf("good bye!\n"); } 上面的是原版的 ######这代码看着真不习惯!######我也是网上找的,看不懂啊######osc “拿来主义”的人真多!######我不会写啊,捂脸。。。######各位大神,小弟已经把错误找粗来了,谢谢大家######把代码 格式化 一下嘛,即使愿意帮你解答问题的,看到你这么乱的代码,都没心思给你解答了 ######话说代码一般是什么样子的?我还是学生所以还有好多不懂######看到这代码真的想转行去了######@mojoggg 太可怕了,以后可以找个高亮的文本编辑器,这样会好看很多,不然一堆Bug是肯定的了。还有,复制的代码不要粘贴就运行,光是注释都很可怕######为什么?############回复 @mojoggg : orz...######算了 我撤了######这是什么?###### 引用来自“腾勇”的答案 算了 我撤了 ###### 不忍直视

kun坤 2020-05-29 20:57:32 0 浏览量 回答数 0

回答

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class Calculation extends JFrame implements ActionListener{ private JTextField txfResult;//显示操作结果的文本框 JTextField txfM;//显示记忆的索引值的文本框 Double dM=0d;//存储数据 public Calculation() { super("swing 计算器实例"); /*设置用于显示的文本框*/ txfResult =new JTextField("0",30);//初始文本显示0 最大列数30 txfResult.setBackground(Color.WHITE); txfResult.setHorizontalAlignment(JTextField.RIGHT);//数字在文本框中靠右显示 txfResult.setEditable(false);//文本框不可编辑 即为readOnly只读属性 JPanel ResultTextPanel=new JPanel();//放操作结果文本框的面板 ResultTextPanel.add(txfResult); /*设置用于控制数字的键与显示记忆索引值的文本框*/ txfM=new JTextField(2);//最长2列 JButton b1=new JButton("Backspace");//退格键 JButton b2=new JButton("CE");//重置键 JButton b3=new JButton("C");//清0键 JPanel ControlPanel=new JPanel(); ControlPanel.setLayout(new GridLayout(1, 4, 2, 2));//1行4列 水平间距2 垂直间距2 ControlPanel.add(txfM); ControlPanel.add(b1); ControlPanel.add(b2); ControlPanel.add(b3); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); /*数字和运算符键*/ String dcKey[]= {"MC","7","8","9","/","sqrt","MR","4","5","6","*","%","MS","1","2","3","-","1/x" ,"M+","0","+/-",".","+","="}; JPanel dcKeyPanel =new JPanel();//数字和运算符的面板 dcKeyPanel.setLayout(new GridLayout(4, 6,2,2)); //一个 循环放好所有数字和运算符组件 for(int i=0;i<24;i++) { JButton b=new JButton(dcKey[i]); dcKeyPanel.add(b); b.addActionListener(this); } Container ct=this.getContentPane();//窗体内容面板对象 ct.setLayout(new BorderLayout()); ct.add(ResultTextPanel,BorderLayout.NORTH); ct.add(ControlPanel,BorderLayout.CENTER); ct.add(dcKeyPanel,BorderLayout.SOUTH); pack(); setVisible(true); setResizable(false);//禁止最大化 setLocationRelativeTo(null);//居中显示 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new Calculation(); } //////////////////////////////////////////////////////数字键和功能键的实现///////////////////////////////////////////////////////// private boolean newDigital=true;//类内全局boolean变量 用于表示是否是输入数的标志 private String operation="";//表示运算符的字符串 private double d1;//二元运算前操数 private double d2;//二元运算后操作数 private int optionValue;//区别加减乘除运算符的变量 /*监听方法*/ @Override public void actionPerformed(ActionEvent e) { String s=(e.getActionCommand());//返回与此动作相关的命令字符串 就是button上显示的字 String str=txfResult.getText(); /*后退键*/ if(s.equals("Backspace")) { if(str.equals("0")||str.equals("")) {//已经是清0状态下 不可再清0了 return; } String s1=txfResult.getText(); txfResult.setText(s1.substring(0, s1.length()-1));//截掉最后一个数字 } /*重置键*/ if(s.equals("CE")) { txfResult.setText("0"); newDigital=true;//是否是新输入的数的标志设置为true } /*清0键*/ if(s.equals("C")) { txfResult.setText("0"); optionValue=0;//表示运算符的变量设置为0 newDigital=true;//表示是否新输入的数的标志设置为true } /*数字键*/ if(s.length()==1&&s.charAt(0)>='0'&&s.charAt(0)<='9') { if(!newDigital) { txfResult.setText(str+s);//不是新输入的数 }else { txfResult.setText(s); newDigital=false;//表示是否新输入的数的标志设置为false } return; } /*小数点*/ if(s.equals(".")) { if(txfResult.getText().indexOf(".")==-1) {//若之前尚不存在小数点 /*判断数字是否0打头*/ if(txfResult.getText().trim().startsWith("0")) {//强大的API txfResult.setText("0."); newDigital=false; }else { txfResult.setText(str+".");//str事件刚开始就得到的txfResult.getText() } } return; } /* 表示数字正负符号+/- */ if(s.equals("+/-")) { double d=Double.parseDouble(str.trim());//获取输入的数字 txfResult.setText(String.valueOf(-d));//取得获取输入数字的相反数 return; } //////////////////////////////////////////////////////加减乘除运算的实现///////////////////////////////////////////////////////// if(s.equals("+")) { d1=Double.parseDouble(txfResult.getText());//立刻获取前操作数的值 txfResult.setText(""); optionValue=1;//设置运算符标志 } if(s.equals("-")) { d1=Double.parseDouble(txfResult.getText()); optionValue=2; } if(s.equals("*")) { d1=Double.parseDouble(txfResult.getText()); optionValue=3; } if(s.equals("/")) { d1=Double.parseDouble(txfResult.getText()); optionValue=4; } if(s.equals("=")) { d2=Double.parseDouble(txfResult.getText());//获取后操作数的值 /*根据运算符标志的不同值确定计算结果*/ switch(optionValue) { case 1: txfResult.setText(String.valueOf(d1+d2)); break; case 2: txfResult.setText(String.valueOf(d1-d2)); break; case 3: txfResult.setText(String.valueOf(d1*d2)); break; case 4: if(d2!=0) { txfResult.setText(String.valueOf(d1/d2)); }else { txfResult.setText("除数不能为0"); return; } break; } operation="";//运算结束 清空运算符 } ////////////////////////////////求平方根 倒数 百分比运算///////////////////////////////// if(s.equals("sqrt")) { double d=Double.parseDouble(txfResult.getText().trim());//获取操作数的值 if(d>0) { txfResult.setText(String.valueOf(Math.sqrt(d)));//计算该值的平方根 }else { txfResult.setText("负数不能计算平方根"); } }else if(s.equals("1/x")) { double d=Double.parseDouble(txfResult.getText().trim());//计算倒数 if(str.equals("0")) { txfResult.setText("除数不能为0"); }else { txfResult.setText(String.valueOf(1/d)); } }else if(s.equals("%")) { txfResult.setText((String.valueOf(Double.parseDouble(str)/100))); } ///////////////////////////////////////////实现数据的记忆功能/////////////////////////////////// if(s.equals("MC")) {//清空存储数据 txfResult.setText(""); dM=0d; newDigital=true; } if(s.equals("MR")) { if(txfM.getText().trim()!="") { txfResult.setText(""+dM);//显示存储数字当前值 } } if(s.equals("MS")) { dM=Double.parseDouble(txfResult.getText().trim()); txfM.setText("M");//存储区显示M } if(s.equals("M+")) { dM=dM+Double.parseDouble(txfResult.getText().trim());//将显示的数字与已经存储的数据相加 即更新存储数据 } } }

DM。 2020-05-27 13:40:29 0 浏览量 回答数 0

回答

加法:   (1)首先是最右数码位相加。这里加数和被加数的最后一位分别为“0”和“1”,根据加法原则可以知道,相加后为“1”。   (2)再进行倒数第二位相加。这里加数和被加数的倒数第二位都为“1”,根据加法原则可以知道,相加后为“(10)2”,此时把后面的“0”留下,而把第一位的“1”向高一位进“1”。   (3)再进行倒数第三位相加。这里加数和被加数的倒数第二位都为“0”,根据加法原则可以知道,本来结果应为“0”,但倒数第二位已向这位进“1”了,相当于要加“被加数”、“加数”和“进位”这三个数的这个数码位,所以结果应为0 1=1。   (4)最后最高位相加。这里加数和被加数的最高位都为“1”,根据加法原则可以知道,相加后为“(10)2”。一位只能有一个数字,所以需要再向前进“1”,本身位留下“0”,这样该位相加后就得到“0”,而新的最高位为“1。 减法:   (1)首先最后一位向倒数第二位借“1”,相当于得到了(10)2,也就是相当于十进制数中的2,用2减去1得1。   (2)再计算倒数第二位,因为该位同样为“0”,不及减数“1”大,需要继续向倒数第三位借“1”(同样是借“1”当“2”),但因为它在上一步中已借给了最后一位“1”(此时是真实的“1”),则倒数第二位为1,与减数“1”相减后得到“0”。   (3)用同样的方法倒数第三位要向它们的上一位借“1”(同样是当“2”),但同样已向它的下一位(倒数第二位)借给“1”(此时也是真实的“1”),所以最终得值也为“0”。   (4)被减数的倒数第四位尽管与前面的几位一样,也为“0”,但它所对应的减数倒数第四位却为“0”,而不是前面几位中对应的“1”,它向它的高位(倒数第五位)借“1”(相当于“2”)后,在借给了倒数第四位“1”(真实的“1”)后,仍有“1”余,1 –0=1,所以该位结果为“1”。   (5)被减数的倒数第五位原来为“1”,但它借给了倒数第四位,所以最后为“0”,而此时减数的倒数第五位却为“1”,这样被减数需要继续向它的高位(倒数第六位)借“1”(相当于“2”),2–1=1。   (6)被减数的最后一位本来为“1”,可是借给倒数第五位后就为“0”了,而减数没有这个位,这样结果也就是被减数的相应位值大小,此处为“0”。   在二进制数的加、减法运算中一定要联系上十进制数的加、减法运算方法,其实它们的道理是一样的,也是一一对应的。在十进制数的加法中,进“1”仍就当“1”,在二进制数中也是进“1”当“1”。在十进制数减法中我们向高位借“1”当“10”,在二进制数中就是借“1”当“2”。而被借的数仍然只是减少了“1”,这与十进制数一样。 乘法:   把二进制数中的“0”和“1”全部当成是十进制数中的“0”和“1”即可。根据十进制数中的乘法运算知道,任何数与“0”相乘所得的积均为“0”,这一点同样适用于二进制数的乘法运算。只有“1”与“1”相乘才等于“1”。乘法运算步骤:   (1)首先是乘数的最低位与被乘数的所有位相乘,因为乘数的最低位为“0”,根据以上原则可以得出,它与被乘数(1110)2的所有位相乘后的结果都为“0”。   (2)再是乘数的倒数第二位与被乘数的所有位相乘,因为乘数的这一位为“1”,根据以上原则可以得出,它与被乘数(1110)2的高三位相乘后的结果都为“1”,而于最低位相乘后的结果为“0”。   (3)再是乘数的倒数第三位与被乘数的所有位相乘,同样因为乘数的这一位为“1”,处理方法与结果都与上一步的倒数第二位一样,不再赘述。   (4)最后是乘数的最高位与被乘数的所有位相乘,因为乘数的这一位为“0”,所以与被乘数(1110)2的所有位相乘后的结果都为“0”。   (5)然后再按照前面介绍的二进制数加法原则对以上四步所得的结果按位相加(与十进制数的乘法运算方法一样),结果得到(1110)2×(0110)2=(1010100)2。 除法:   (1)首先用“1”作为商试一下,相当于用“1”乘以除数“110”,然后把所得到的各位再与被除数的前4位“1001”相减。按照减法运算规则可以得到的余数为“011”。   (2)因为“011”与除数“110”相比,不足以被除,所以需要向低取一位,最终得到“0111”,此时的数就比除数“110”大了,可以继续除了。同样用“1”作为商去除,相当于用“1”去乘除数“110”,然后把所得的积与被除数中当前四位“0111”相减。根据以上介绍的减法运算规则可以得到此步的余数为“1”。   (3)因为“1”要远比除数“110”小,被除数向前取一位后为“11”,仍不够“110”除,所以此时需在商位置上用“0”作为商了。   (4)然后在被除数上继续向前取一位,得到“110”。此时恰好与除数“110”完全一样,结果当然是用“1”作为商,用它乘以除数“110”后再与被除数相减,得到的余数正好为“0”。证明这两个数能够整除。   这样一来,所得的商(1101)2就是两者相除的结果。-------------------------二进制数的运算方法 同十进制都属于 进位 运算方法,它们有类似的地方,当然也有不同的地方,二进制下只有加法。乘法和减法是变相的加法,除法只是简单地移位。 首先,简单的说明一下,什么是进位 运算方法。    十进制含有的数是 0 1 2 3 4 5  6 7 8 9  十个数, 而二级制只有两个数 0 1  比方说十进制数   1234=1x10^3 + 1x10^2 + 3x10^1 + 4x10^0 其中1 2 3 4 分别居在 千位 十位 百位 个位 。 同样的二进制数 里也存在一样的位制  二进制化十进制 二进制的1010  =1 x 2^3+ 0 x 2^2 + 1 x 2^1+ 0 x 2^0 =  10 (十进制) 同理十进制化为二进制 :10(10)=1 x 2^3+ 0 x 2^2 + 1 x 2^1+ 0 x 2^0 =1010(2)因为我们不能较快的获得有多少个 2^0 2^1  2^2   2^3  2^4  2^5  2^6 ........2^n 所以才有短除法这一形式来辅助运算 除2取余法   10/2=5.......0     5/2=2........1      2/2=1........0       1/2=0........1      把结果倒过来写就是1010了  以上是进制的转换。 加法: 下面就是加法的运算      十进制下有                                                   二进制下就有      1234                                                                     1011                                                                     +   2846                                                            +       1111                     —--.--.—---                                                         ------.-.-.------                                                         4080                                                                   11010    总的来说 二进制下和是十进制的运算时一样的, 十进制下满十进一,二进制下满二进一。 减法 有两种方式    以下是特殊情况  注意第一位是符号位。  0代表正数, 1 代表负数            。。                                             另一种方式是吧减法当成加上一个负数   0    1 0 0 1                                                             0     1001 - 0    1 1 1 1             《===》                        +         1     0001              ----------------                                                 ------------------。------   1    1 0 1 0           算的结果是负数                           1    1010 负数与成正数互化就是取反加一 取反 0 1 0 1 +               1 ---------------    负的 0 1 1 0 =负的 0x2^3+1x^2+1x2^1+0x2^0=  负6               表示方法是取反加一 前面的第一位是符号位 1 代表负数  1  1110 乘法111x111=    1   1   1              x            1   1   1     --------------------------------                           1    1   1                      1   1    1 +               1  1   1      -----------------------------------             1   1   0   0   0    1 除法:            1 1 1 1 / 1 0= 111      1111 / 11 = 101 除法和十进制的出发类似 不同的是这里是不会出现小数的 就像例子中的1 1 1 1 / 1 0= 111   化成十进制是 15除以2 但是结果却是111=7 因为那个余数1 已经被挤出去了,这里涉及到了计算机的内存问题 这就不深究 知道怎么算就好了    还有最重要的是亲看了满意要给分哦。

玄学酱 2019-12-02 01:27:57 0 浏览量 回答数 0

问题

【阿里云产品公测】简单日志服务SLS使用评测含教程

mr_wid 2019-12-01 21:08:11 36639 浏览量 回答数 20

问题

线性表 7月8日 【今日算法】

游客ih62co2qqq5ww 2020-07-09 07:47:37 504 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站