• 算法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 转自知乎

     
  • 相关阅读:
    《软件架构师的12项修炼》阅读笔记01
    《架构即未来》阅读笔记03
    《一线架构师时间指南》-Refined Architecture阶段
    《架构即未来》阅读笔记02
    《架构即未来》阅读笔记01
    大三下第四周总结
    RPA自动化
    在shell中使用Flask
    用蓝图实现模块化应用
    请求上下文
  • 原文地址:https://www.cnblogs.com/developerchen/p/7142380.html
Copyright © 2020-2023  润新知