• Java 位运算符和 int 类型的实现


    其他运算符

    # 算术运算符
    +、-、*、/、++i、i++、--i、i--
    
    # 关系运算符
    ==、!=、>、<、>=、<=
    
    # 逻辑运算符
    &&、||、!
    
    # 赋值运算符
    =、运算符=
     
    <!-- more -->
     
    
    # 其他运算符
    ## 三元运算符
    bool表达式 ? x : y
    ## instanceof 运算符
    boolean result = var instanceof classname;
    

    位运算符

    • &
    • |
    • ^ 异或
    • 按位取反
    • << 左移运算符,向左移动指定位数,一般情况下每移动一位都会乘以2
    • >> 右移运算符,向右移动指定位数,一般情况下每移动一位都是除以2
    • >>> 按位右移补零操作符

    Java int 的实现

    • int 基本信息
      Java 中 int 为32 位,是基本类型的一种,对应包装类为Integer
      Java 不存在无符号类型,int 由0、1~231-1、-1~(-2)31 三部分组成

    • 负数如何表示?
      负数部分使用补码表示
      补码:原码按位取反得到反码,反码加一得到补码

    • 正整数部分少一个数
      因为 1····0 的补码为其本身,这是一个负数,一个二进制数总能表示偶数个数字,使用了0之后负数能比正数多表示一个,就是 1····0。

    重点,Java 中int 位移的特殊情况

    根据 int 实现的原理,int 移位会产生一些特殊情况,如:

    2147483647<<1 的结果为 -2,为什么呢?因为 2147483647 为 2^31-1(2的31 次方减1),即:0111,1111,1111,1111,1111,1111,1111,1111,当它向右移位得到的结果是 1111,1111,1111,1111,1111,1111,1111,1110,此时对于 Java 来讲,这已经是一个负数了

    要先减去1 得到 1111,1111,1111,1111,1111,1111,1111,1101,再取反得到 0000,0000,0000,0000,0000,0000,0000,0010 也就是 2,所以结果是-2

  • 相关阅读:
    Android_项目文件结构目录分析
    WPF_MVVM 开发的几种模式讨论
    Blend_技巧篇_淡入淡出
    Blend_技巧篇_导入PSD文件制作ToggleButton (Z)
    Blend_界面快速入门(Z)
    Blend_软件系列简介(Z)
    Blend_ControlTemplate(Z)
    803. 区间合并
    P4017 最大食物链计数
    P1113 杂务
  • 原文地址:https://www.cnblogs.com/imzhizi/p/java-wei-yun-suan-fu-he-int-lei-xing-de-shi-xian.html
Copyright © 2020-2023  润新知