• ~ 非运算操作


    java ~ 非运算操作

    看源码ThreadPoolExecutor 源码时,看到了这么一段

    ~ 非运算符自己编程的时候用的比较少,于是就验证了一下这个运算符。

    
    //https://blog.csdn.net/wenxinwukui234/article/details/42119265   关于补码,我的总结是:  补码巧妙的运用了“进位丢失” 使得补码运算满足  -x + x  = 0 ,这样计算机可以只进行加法运算 不用额外引入减法逻辑,提高运算效率。
    public static void main(String[] args) {
        System.out.println(~(-6) );// ~ 非运算后的 结果 5
        System.out.println(~(0) );//-1
        System.out.println(~(3) );//-4
    
        // 将数字转换成二进制表示,计算机表示二进制数字 使用的是补码。
        // 正数的补码就是原码。  对于负数:   补码 = 原码除了符号位之外 各位取反 + 1   .  原码 = 补码除了符号位之外 各位取反 + 1
        System.out.println( Integer.toBinaryString(-6)); // 打印的值,即-6的补码      11111111111111111111111111111010
        System.out.println(Integer.toBinaryString(0)); // 0
        System.out.println(Integer.toBinaryString(3));//11
    
    
    }
    

    //对  11111111111111111111111111111010   各位取反  得到 00000000000000000000000000000101   既可得到 5 的补码 。(也是5原码)
    //对  0 各位取反 得到     11111111111111111111111111111111  是一个补码 , 然后除了符号位 各位取反后+1 得到 10000000000000000000000000000001   (即是 -1的原码)
    // 对 00000000000000000000000000000011 各位取反得到 11111111111111111111111111111100    取反+1 得到    10000000000000000000000000000100 (即-4 的原码)  
    // 总结:  ~  非运算 ,即对 一个数字的二进制(计算机用补码表示数字)  进行各位取反。   最终这个获取的值表示哪一个数字 则需要对结果再求其相应的原码 才能看出来。
    
  • 相关阅读:
    TDirectory.GetParent获取指定目录的父目录
    TDirectory.GetLogicalDrives获取本地逻辑驱动器
    获取设置目录创建、访问、修改时间
    TDirectory.GetLastAccessTime获取指定目录最后访问时间
    TDirectory.GetDirectoryRoot获取指定目录的根目录
    「洛谷P1262」间谍网络 解题报告
    「洛谷P1198」 [JSOI2008]最大数 解题报告
    「洛谷P3931」 SAC E#1
    「UVA1328」「POJ1961」 Period 解题报告
    「博客美化」I 页面的CSS
  • 原文地址:https://www.cnblogs.com/paidaxing7090/p/15205603.html
Copyright © 2020-2023  润新知