zoukankan      html  css  js  c++  java
  • 算法1.1课后问答及习题

    1. java bytecode

    C/C++编译器把源代码编译成汇编代码,Java编译器把Java源代码编译成字节码bytecode。 
    Java跨平台其实就是基于相同的bytecode规范做不同平台的虚拟机,我们的Java程序编译成bytecode后就可以在不同平台跑了。 
    .net框架有IL(intermediate language),汇编是C/C++程序的中间表达方式,而bytecode可以说是Java平台的中间语言。

    2. ints overflow问题

    int溢出 java不会报错 会显示一个错误的值。

    3. What is the value of Math.abs(-2147483648)?  (2^31 = 2 147 483 648)

    the answer is -2147483648.

    reason: Java的int的范围是 Integer.MIN_VALUE(-2^31) 到 Integer.MAX_VALUE(2^31-1)。-Integer.MIN_VALUE 的值大于 Integer.MAX_VALUE ,无法正确被Java的int表示。而 -Integer.MIN_VALUE 在32位的范围内的补码表现形式正好跟 Integer.MIN_VALUE 一样   (该答案转自知乎)

    举个栗子,Java中32位的int,
    最大值为:2147483647, 二进制:01111111111111111111111111111111
    最小值为:-2147483648,二进制:10000000000000000000000000000000

    而二进制正负转换的方式是反码+1,反码就是正码的所有位数的0和1对换。
    -2147483648的二进制正码:10000000000000000000000000000000
    -2147483648的二进制反码:01111111111111111111111111111111
    -2147483648的二进制反码+1:10000000000000000000000000000000

    搞了半天又回来了,所以Math.abs(-2147483648) 等于-2147483648。

    关于补码的一点知识补充:https://www.douban.com/note/223507364/ 转自豆瓣 作者百脑

    解决完这道题才算真正懂得补码:https://www.zhihu.com/question/28685048 转自知乎

     
  • 相关阅读:
    队列分类梳理
    停止线程
    Docker和Kubernetes
    Future、Callback、Promise
    Static、Final、static final
    线程池梳理
    TCP四次挥手
    http1.0、http1.x、http 2和https梳理
    重排序
    java内存模型梳理
  • 原文地址:https://www.cnblogs.com/developerchen/p/7142380.html
Copyright © 2011-2022 走看看