zoukankan      html  css  js  c++  java
  • 一道有意思的求绝对值的题。

    今天在加群的时候,必须要回答问题才能加群,问题是Math.abs(~2018),这道题第一眼看比较怪,在百度了一下,后来想起了大二学的微机原理里面的原码、补码、反码的知识,现在就简单的分析一下这个问题。

    第一先要了解整形在计算机中是4个字节的,一个字节8位,所以整形一共32位。

    先举个一个简单的例子,就是Math.abs(~10)

    10的二进制是 00000000 00000000 00000000 00001010

    ~10的二进制是  11111111 11111111 11111111 11110101 ,符号位为1所以~10是负数,

    第二要了解,负数在计算机中是以其原码的补码存在的,通俗理解就是原码的反码加1,

    ~10的原码就是 11111111 11111111 11111111 11110101 

    ~10的原码的反码就是  10000000 00000000 00000000 00001010

    ~10的原码的反码+1(~10的补码)  10000000 00000000 00000000 00001011 

    10000000 00000000 00000000 00001011 为-11

    所以Math.abs(~10)=Math.abs(-11)=11

    同理Math.abs(~2018)=Math.abs(-2019)=2019

    第三点,取反≠反码

  • 相关阅读:
    leetcode bugfree note
    leetcode 419
    leetcode 165
    leetcode 155
    leetcode 204
    leetcode 28
    将二叉搜索树转为有序双向链表
    leetcode 397
    ABAP 动态内表创建/赋值
    ABAP 屏幕下拉框值根据选择框填值赋值
  • 原文地址:https://www.cnblogs.com/dirkhe/p/6399084.html
Copyright © 2011-2022 走看看