精华内容
下载资源
问答
  • JAVA表达式之谜

    2018-08-22 17:36:02
    分析:这是Java对取余操作符(%)定义所产生,上述方法对于所有负奇数判断都会失败,在任何负整数上调用该方法都会返回false,不管该负整数是奇数还是偶数。因为 -1 % 2 结果是 -1,有...

    一、奇数性

     

    下面方法的目的是确定一个数是否为奇数

     

    public static boolean isOdd(int i){ 

        return i % 2 == 1; 

    } 

    分析:这是Java对取余操作符(%)的定义所产生的,上述方法对于所有的负奇数判断都会失败,在任何负整数上调用该方法都会返回false,不管该负整数是奇数还是偶数。因为 -1 % 2 的结果是 -1,有符号。

    建议:无论你何时使用到了取余操作符,都要考虑到操作数和结果的符号。

    解决:

    所以上述代码改正如下:

    public static boolean isOdd(int i){ 

        return i % 2 != 0; 

    }

    如果是在一个强调性能的环境中,使用位操作符 & 替代取余操作符会更好

    public static boolean isOdd3(int i){ 

        return (i & 1) != 0; 

    } 

    二、长整数

     

        final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000;

        final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000;

        System.out.println(MICROS_PER_DAY / MILLIS_PER_DAY);

     

    输出结果为:5

    分析:所有的计算因子都是int类型的,所以在连乘的时候,两个int类型的数相乘最终得到的还是int类型的,24*60*60*1000*1000这个计算在乘以最后一个1000的时候结果超出了2147483647(int能表示的最大值)发生了溢出,虽然计算的结果放入Long中,但是这个计算是完全以int类型来计算的。

    建议:当操作很大的数字时,要堤防溢出

    解决:强制表达式中的所有后缀计算用Long运算来完成

        final long MICROS_PER_DAY = 24L * 60 * 60 * 1000 * 1000;

        final long MILLIS_PER_DAY = 24L* 60 * 60 * 1000;

        System.out.println(MICROS_PER_DAY / MILLIS_PER_DAY);

    注:因为连乘是从左到右计算的,所以强制转换应该从第一个参与计算的数据开始

    下列转换方式是错误的

        final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000L;

        final long MILLIS_PER_DAY = 24* 60 * 60 * 1000L;

        System.out.println(MICROS_PER_DAY / MILLIS_PER_DAY);

     

    三、找零时刻

        System.out.println(2.00 - 1.10);

    输出结果:0.8999999999999999

    分析:并不是所有的小数都可以用二进制浮点数精确表示

    建议:在需要精确答案的地方,要避免使用float和double。对于货币计算,要使用int、long、BigDecimal。一定要用BigDecimal(String)构造器,而千万不要用BigDecimal(double)。后一个构造器将用它的参数的精确值来创建一个实例。

    解决:

    1、JDK1.5或更新的版本,可以使用printf方法

        System.out.printf("%.2f",2.0-1.1); 

    2、 使用BigDecimal类

        System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.10")));

     

    四、多重转型

     

        System.out.println((int) (char) (byte) -1);//65535

            

        System.out.println(0xffffffff);//-1

        byte b= -1; 

        System.out.println((int)(char) b ); //65535

        System.out.println((int)(char)(b & 0xff));//255

        System.out.println((byte)128);//-128

    分析如果最初的数值类型是有符号的,就执行符号扩展。如果是char,那么不管它将要被转换成什么类型,都执行零扩展。

    一、Java中如何编码负数?

        Java采用”2的补码“(Two's Complement)编码负数,它是一种数值的编码方法,要分二步完成:

        第一步,每一个二进制位都取相反值,0变成1,1变成0。比如,+8的二进制编码是00001000,取反后就是11110111。

        第二步,将上一步得到的值加1。11110111就变成11111000。所以,00001000的2的补码就是11111000。也就是说,-8在计算机(8位机)中就是用11111000表示。

    二、什么是符号扩展(Sign Extension)?

        符号扩展(Sign Extension)用于在数值类型转换时扩展二进制位的长度,以保证转换后的数值和原数值的符号(正或负)和大小相同,一般用于较窄的类型(如byte)向较宽的类型(如int)转换。扩展二进制位长度指的是,在原数值的二进制位左边补齐若干个符号位(0表示正,1表示负)。

        举例来说,如果用6个bit表示十进制数10,二进制码为"00 1010",如果将它进行符号扩展为16bits长度,结果是"0000 0000 0000 1010",即在左边补上10个0(因为10是正数,符号为0),符号扩展前后数值的大小和符号都保持不变;如果用10bits表示十进制数-15,使用“2的补码”编码后,二进制码为"11 1111 0001",如果将它进行符号扩展为16bits,结果是"1111 1111 1111 0001",即在左边补上6个1(因为-15是负数,符号为1),符号扩展前后数值的大小和符号都保持不变。

    三、Java类型转换规则

    1. Java中整型字面量   

     Java中int型字面量的书写方式有以下几种:

        - 十进制方式,直接书写十进制数字

        - 八进制方式,格式以0打头,例如012表示十进制10

        - 十六进制方式,格式为0x打头,例如0xff表示十进制255

     需要注意的是,在Java中012和0xff返回的都是int型数据,即长度是32位。

    2. Java的数值类型转换规则

        这个规则是《Java解惑》总结的:如果最初的数值类型是有符号的,那么就执行符号扩展;如果是char类型,那么不管它要被转换成什么类型,都执行零扩展。还有另外一条规则也需要记住,如果目标类型的长度小于源类型的长度,则直接截取目标类型的长度。例如将int型转换成byte型,直接截取int型的右边8位。

    四、解析“多重转型”问题

        连续三次类型转换的表达式如下:

    (int)(char)(byte)-1

    1. int(32位) -> byte(8位)

        -1是int型的字面量,根据“2的补码”编码规则,编码结果为0xffffffff,即32位全部置1.转换成byte类型时,直接截取最后8位,所以byte结果为0xff,对应的十进制值是-1.

    2. byte(8位) -> char(16位)

        由于byte是有符号类型,所以在转换成char型(16位)时需要进行符号扩展,即在0xff左边连续补上8个1(1是0xff的符号位),结果是0xffff。由于char是无符号类型,所以0xffff表示的十进制数是65535。

    3. char(16位) -> int(32位)

        由于char是无符号类型,转换成int型时进行零扩展,即在0xffff左边连续补上16个0,结果是0x0000ffff,对应的十进制数是65535。

    总结:实际上在数值类型转换时,只有当遇到负数时才会出现问题,根本原因就是Java中的负数不是采用直观的方式进行编码,而是采用“2的补码”方式,这样的好处是加法和减法操作可以同时使用加法电路完成,但是在开发时却会遇到很多奇怪的问题,例如(byte)128的结果是-128,即一个大的正数,截断后却变成了负数。

     

     

     

     

     

     

     

    展开全文
  • EL表达式 (详解)

    2009-12-24 14:32:53
    是否为 ${pageContext.session.id} 取得session ID ${pageContext.servletContext.serverInfo} 取得主机端服务信息 4) 条件标签> 1.算术运算符有五个:+、-、*或$、/或div、%或mod 2.关系运算符有...
  • 一A类程序设计题 1将用户输入字母自动转换为大写字母后输出假定用户输入字符均是字母 2判断用户所输入的整数是否为偶数 3 编程实现并输出两个数大小判断将大数输出 4 编程实现并输出两个数和值 5 编程计算并...
  • 三元条件运算符

    2020-08-08 10:00:18
    说明:如果表达式1true ,则整个表达式的结果就是表达式2值,如果表达式false,则整个表达式的结果就是表达式3值. 例子: 1、使用三元运算符计算2个数最大值 2、使用三元运算符求一个数绝对值 3、使用...

    三元条件运算符

    格式: 表达式1?表达式2:表达式3

    说明:如果表达式1为true ,则整个表达式的结果就是表达式2的值,如果表达式false,则整个表达式的结果就是表达式3的值.

    例子:

    1、使用三元运算符计算2个数的最大值

    2、使用三元运算符求一个数的绝对值

    3、使用三元运算符判断一个整数是奇数还是偶数

    使用三元运算符判断成绩是否及格
    var grade=80;
    var str=grade>=60?‘及格’:‘不及格’

    4、使用三元运算符判断性别是男还是女。如果sex变量等于M或m,那么表示男,否则表

    示女
    var a=window.prompt(‘请输入性别M m F f’);
    var sex=a==‘M’||a==‘m’?‘男’:‘女’;

    展开全文
  • if语句

    2020-07-16 21:36:14
    ''' if 语句 格式: if 表达式: 语句 逻辑:当程序执行到if语句时,首先计算“表达式值,如果表达式的值为真,则执行if下“语句”, 如果表达式的值为假,则跳过...#从控制台输入一个整数判断是否为偶数 .
    '''
    if 语句
    
    格式:
    if 表达式:
        语句
    
    逻辑:当程序执行到if语句时,首先计算“表达式”的值,如果表达式的值为真,则执行if下的“语句”,
        如果表达式的值为假,则跳过整个if语句继续向下执行。
    
    何为真假:
    假:0  0.0  ''  None  False
    真:除了假就是真
    '''
    num5 = 20
    num6 = 20
    
    if num5 == num6:
        num5 = 100
    
    print("num5 =", num5)
    
    #从控制台输入一个整数,判断是否为偶数
    
    num = int(input("请输入一个整数"))
    if num % 2 == 0:
        print("是偶数")
    
    
    '''
    if-else
    if 表达式:
        语句1
    else:
        语句2
    逻辑:当程序执行到if-else语句时,首先计算“表达式”的值,如果表达式的值为真,则执行“语句1”,执行完跳出整个if-else语句
        如果表达式的值为假,则执行语句2,执行完则跳出整个if-else语句。
    '''
    #从控制台输入一个整数,判断是否为偶数
    
    num = int(input("请输入一个整数"))
    if num % 2 == 0:
        print("是偶数")
    else:
        print("是奇数")
    
    展开全文
  • 二进制与位运算 ...(x&(x-1))//表达式为真表示x是2n次幂,x去除0这种特殊情况正整数的运算 x>>n;//x除以2n次幂 取模运算x&(2^k-1);///x对2^k取模 交换两个数a^=b; b^=a; a^=b;快速幂取模运算

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1、二进制与位运算</span>

    要谈二进制,不得不谈一下位运算。关于二进制的操作都是基于位运算的。位运算的显著特点就是效率高

    基本操作:<<   >>  ^  &  |   ~  !  

    位运算常用基础:

    判断奇偶性:

    <span style="font-size:12px;">x&1==0 //为偶数</span>
    <span style="font-size:12px;">
    </span>


    求平均值:求(x+y)/2时,可能x+y会超过int的最大值,可以用位运算来求:
    <span style="font-weight: normal;">int Ave(int x,int y)  { 
      return x&y+((x^y)>>1);  
    } </span>

    判断一个数是否是2的n次幂

    <span style="font-size:12px;">x&&!(<span style="color:#ff0000;">x&(x-1)</span>)//表达式为真表示x是2^n,x去除0这种特殊情况</span>


    正整数的运算

    x>>n;//x除以2的n次幂


    取模运算

    <span style="font-size:12px;">x&(2^k-1);///x对2^k取模</span>


    交换两个数

    <span style="font-size:12px;">a^=b;
    b^=a;
    a^=b;</span>


    计算绝对值

    int abs(int x){
    int y;
    y=x>>31;
    return (x^y)-y;
    }

    快速幂运算

    <span style="font-size:12px;">int pows(int a,int b){
    int ans=1,tmp=a;
    while(b!=0){
    if(b&1)
    ans*=tmp;
    tmp*=tmp;
    b>>1;
    }
    return ans;
    }
    
    </span>
    蒙哥利马幂模运算

    <span style="font-size:12px;">//前提:
    (a*b) % c = (a%c) * b % c;   //(公式1)
    (a*b) % c = (a%c) * b % c = (b%c) * (a%c) % c = (a%c) * (b%c) % c;        ///【公式二】</span>
    核心基于快速密运算

    <span style="font-size:12px;">int expMod2(int a,int b,int mod){
    int tx=a;
    int ans=1;
    tx%=mod;
    while(b!=0){
    if(b&1)
    ans=ans*tx%mod;
    
    b=(b>>1);
    tx=tx*tx%k;
    }
    return ans;
    }</span>









    展开全文
  • 二进制运算技巧

    2019-07-05 10:09:59
    二进制运算常用技巧 1、 用于整数的奇偶性判断 ...2、 判断n是否是2整数冪 (!(n&(n-1)) ) && n 好!看完上面两个小例子,相信大家都有一个感性认识。从理论上讲,如果一个数a他是2整数幂...
  • 2020-09-29

    2020-09-29 08:30:21
    判断字符串是否表示数值 字符串左旋K位操作 正则表达式匹配问题 字符串转整数 扑克牌顺子 翻转一句话中单词 旋转字符串问题(难) 数组问题 构建乘积数组 数组中重复数字 和sum两个数字 数组中只有唯...
  • 问题总结

    2019-05-11 15:35:57
    数组相关 I: 问题:怎样添加元素到一个数组中去? 例如,我想把"A1,B2,C3,C2,A2,A3"按照顺序分别放入...II: 问题:如何判断一个数字是否为小数或者整数? import java.util.regex.Matcher; import java.util.reg...
  • python基础练习题

    2019-12-31 21:30:52
    1.输入一个考试分数,判断考试结果是否为通过,如果分数>= 60,通过,否则,结果为不通过(分别使用双分支,以及三元条件表达式) 2.输入工资数,计算出其税后收入(自行查询个税税率,暂不考虑税费减免政策) 3....
  • 同时,在将复制结点random指向原始链表结点randomnext时候,需要先判断一下,原始链表结点next是否为None,不为None再指向。 面试题27:二叉搜索树与双向链表:按照左右子树分治,递归实现。根左边连接...
  • javascript入门笔记

    2018-05-15 15:01:07
    使用场合:任意数字与1做按位与操作,可以判断奇偶性,结果为1,则为奇数,否则为偶数 0 :0 1 :1 2 :10 3 :11 4 :100 5 :101 5 & 1 101 001 ========== 001 4 & 1 100 001 ==== 000 2、按...
  • 判断一个栈是否是另一个栈弹出序列 测试22 第二十三题 层序遍历二叉树 测试23 第二十四题 后序遍历二叉搜索树 测试24 第二十五题 二叉树中和某值路径 测试25 第二十六题 复杂链表复制 测试26 第二...
  • 2.2.13 EVEN——以绝对值增大方向舍入到最接近偶数 77 2.2.14 ODD——以绝对值增大方向舍入到最接近奇数 78 2.3 指数与对数计算 79 2.3.1 POWER——计算数字乘幂 79 2.3.2 EXP——计算en 次方 80 ...
  • 1371.每个元音包含偶数最长子字符串 1381. 设计一个支持增量操作栈 91 1558. 得到目标数组最少函数调用次数 1574. 删除最短子数组使剩余数组有序 1631. 最小体力消耗路径 1658. 将 x 减到 0 ...
  • c语言经典案例

    2014-10-30 08:06:57
    实例069 判断字母是否为大写 88 实例070 检查字符类型 89 实例071 求最低分和最高分 90 实例072 模拟自动售货机 91 实例073 计算工资 93 实例074 平方和值判断 94 实例075 加油站加油 95 实例076 简单计算器 97 第8...
  • 学习指针是学习C语言中最重要一环, 能否正确理解和使用指针是我们是否掌握C语言一个标志。同时, 指针也是C语言中最为困难一部分,在学习中除了要正确理解基本概念,还必须要多编程,上机调试。只要作到...
  • 实例028 判断某一年是否为闰年 实例029 验证登录信息合法性 实例030 为新员工分配部门 实例031 用Switch语句根据消费金额计算折扣 实例032 判断用户输入月份季节 2.4 循环控制 实例033 使用while与自增...
  • 实例028 判断某一年是否为闰年 实例029 验证登录信息合法性 实例030 为新员工分配部门 实例031 用Switch语句根据消费金额计算折扣 实例032 判断用户输入月份季节 2.4 循环控制 实例033 使用while与自增...
  • 《数据结构 1800题》

    热门讨论 2012-12-27 16:52:03
    其中 n整数,则最后一行语句频度在最坏情况下是(D ) 郴州都市网 www.0735.cc郴州人才网 www.CZHR.com www.989.org 《数据结构 1800题》 A. O(n) B. O(nlogn) C. O(n3) D. O(n2) 【南京理工大学 ...
  • 实例028 判断某一年是否为闰年 38 实例029 验证登录信息合法性 39 实例030 为新员工分配部门 40 实例031 用Switch语句根据消费金额计算折扣 41 实例032 判断用户输入月份季节 42 2.4 循环控制 43 实例033 使用...
  • 实例028 判断某一年是否为闰年 38 实例029 验证登录信息合法性 39 实例030 为新员工分配部门 40 实例031 用Switch语句根据消费金额计算折扣 41 实例032 判断用户输入月份季节 42 2.4 循环控制 43 实例033 使用...
  • ASP200问.EXE

    2010-05-20 13:25:08
    44.如何判断客户端Cookie是否处于开启状态 45.如何使用Cookie记录用户访问信息 46.如何用Cookie实现仅弹出一次同样窗口 48.如何清除页面缓存 49.如何获取用户浏览器信息 50.如何获取用户真实IP地址 52.如何...
  •  判断某数是否为数列中一项,只需将它代入通项公式中求n.若存在正整数n,说明此数是数列项. 例2、设函数f(x)=log2x-logx2(0),数列{an}中第n项an满足 (n=1,2,3,…). (1)求数列{an}通项公式; (2)...
  • 10.5.6 舍入一个偶数或奇数整数 10.5.7 舍入n个有效数字 第III部分 财务公式  第11章 借贷和投资公式 11.1 财务概念 11.1.1 货币时值 11.1.2 现金流进流出 11.1.3 匹配时间段 11.1.4 第一次付款时间...
  • 10.5.6 舍入一个偶数或奇数整数 10.5.7 舍入n个有效数字 第III部分 财务公式  第11章 借贷和投资公式 11.1 财务概念 11.1.1 货币时值 11.1.2 现金流进流出 11.1.3 匹配时间段 11.1.4 第一次付款时间...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

判断整数是否为偶数的表达式