精华内容
下载资源
问答
  • “#Java运算符” <1>计算机的基本编码知识: 源码,反码,补码 ①计算机的这些编码是转换成二进制进行运算的 ②正数的源码,反码,补码均相同 ③关于负数的源码,反码,补码 (补码是计算机数字存储...

    “#Java运算符”
    <1>计算机的基本编码知识:
    源码,反码,补码
    ①计算机的这些编码是转换成二进制进行运算的
    ②正数的源码,反码,补码均相同
    ③关于负数的源码,反码,补码
    在这里插入图片描述
    (补码是计算机数字存储的实际存储形态)
    <2>取反运算:存在公式a+(a)+1=0,所以a=-1-(~a)
    注意点:位取反,对包括标志位在内的所有位直接取反,得出的数标志位为1,表明答案是负数,负数在计算机中以补码的形式存在(正数也是)但是答案一般要求得到十进制答案,所以需要将所得答案转换为十进制,具体操作是:除标志位外整体取反,之后加一(答案为正数执行减一)
    <3>位移操作:左移运算,右移运算,无符号右移运算
    在这里插入图片描述

    (a:待操作数,n:位移的数量)
    详细操作:①左移运算:向左移动一位,高位(最左边)补一位零
    ②右移运算:正数向右移动一位,高位(最左边)补一位零;负数向右移动一位,高位补一位一
    ③无符号右移运算:无论正负右移一位高位补一位零

    展开全文
  • Java位取反运算符“~”

    千次阅读 2018-12-13 10:04:50
    关于学习java中的按位取反(~)的问题 2013年07月16日 00:21:51 daokai1993 阅读数:1468 标签: 新手 之前不知道按位取反到底是怎么计算的 百度谷歌的半天 也没有什么具体的计算防暑 后来自己琢磨了一会儿 发现...

    关于学习java中的按位取反(~)的问题

    2013年07月16日 00:21:51 daokai1993 阅读数:1468 标签: 新手

    之前不知道按位取反到底是怎么计算的

    百度谷歌的半天    也没有什么具体的计算防暑    后来自己琢磨了一会儿 发现了一点按位取反的技巧  在此分享一下

    负数的取反 就是在原码的基础上取反码  然后在取补码(补码=反码+1)当反码的最后一位数已经为1的时候    补码再+1后就应该向前进一位

    例如十进制数: -6    -6在java中的原码为10000000 00000000 00000000 00000110   其反码为11111111 11111111 11111111 11111001 

    所以-6的补码就是11111111 11111111 11111111 11111010   再将补码取反就是~(-6)的二进制数:00000000 00000000 00000000 00000101 转换为10进制就是5.

    正数的原码=补码=反码

    正数的按位取反其实可以参照负数

    其计算方式可以按负数的逆思路直接推出

    比如说一个十进制数:5

    5的原码、反码、补码全部都是00000000 00000000 00000000 00000101   

    那么先将5的二进制数取反,并得到:11111111 11111111 11111111 11111010(把它看做是某个数的补码)

    然后再将得到某个数的补码(姑且称之为补码吧)-1

    就得到反码:11111111 11111111 11111111 11111001(因为补码最后一位数为0  所以往前一位“借数”,所以最后一位数为1)

    最后将反码译为原码:10000000 00000000 00000000 00000110   所以~(5)就为-6.

     

     

    注:以上纯属本人在探索过程中的个人理解,如果错误,希望大神指出!谢谢!

    以上内容转自:https://blog.csdn.net/smilecall/article/details/42454471

    展开全文
  • Java 语言中的位运算符分为位逻辑运算符和位移运算符两类,下面详细介绍每类包含的运算符。 位逻辑运算符 位逻辑运算符包含 4 个:&(与)、|(或)、~(非)和 ^(异或)。除了 ~(即位取反)为单目运算符外...

    位运算符主要用来对操作数二进制的位进行运算。按位运算表示按每个二进制位(bit)进行计算,其操作数和运算结果都是整型值。

    Java 语言中的位运算符分为位逻辑运算符和位移运算符两类,下面详细介绍每类包含的运算符。

    位逻辑运算符

    位逻辑运算符包含 4 个:&(与)、|(或)、~(非)和 ^(异或)。除了 ~(即位取反)为单目运算符外,其余都为双目运算符。表 1 中列出了它们的基本用法。

    表1 位逻辑运算符
    运算符 含义 实例 结果
    & 按位进行与运算 4 & 5 4
    | 按位进行或运算 4 | 5 5
    ^ 按位进行异或运算 4 ^ 5 1
    ~ 按位进行取反运算 ~ 4 -5

    位与运算符

    位与运算符为 &,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位同时为 1,那么计算结果才为 1,否则为 0。因此,任何数与 0 进行按位与运算,其结果都为 0。

    例如下面的表达式:

    100&0


    图 1 所示为这个运算过程,结果为 0。
     


    图1 100 位与 0 的运算过程


    下面是两个非零的数字进行位与运算的过程。

    
     
    1. int x=5,y=12;//创建整型变量保存两个数
    2. int z=x&y;//对这两个数进行位与运算,结果保存到z


    这两行语句执行后变量 Z 的值是 4,图 2 所示为这个运算过程。
     


    图2 5 位与 12 的运算过程

    位或运算符

    位或运算符为 |,其运算规则是:参与运算的数字,低位对齐,高位不足的补零。如果对应的二进制位只要有一个为 1,那么结果就为 1;如果对应的二进制位都为 0,结果才为 0。

    下面是一个使用位或运算符的表达式。

    11|7


    运算结果为 15,图 3 所示为其运算过程。
     


    图3 11 位或 7 的运算过程

    位异或运算符

    位异或运算符为 ^,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位相同(同时为 0 或同时为 1)时,结果为 0;如果对应的二进制位不相同,结果则为 1。

    下面是一个使用位异或运算符的表达式。

    11^7


    运算结果为 12,图 4 所示为其运算过程。
     


    图4 11 位异或 7 的运算过程


    提示:在有的高级语言中,将运算符 ^ 作为求幂运算符,要注意区分。

    位取反运算符

    位取反运算符为 ~,其运算规则是:只对一个操作数进行运算,将操作数二进制中的 1 改为 0,0 改为 1。

    下面是一个使用位取反运算符的表达式。

    ~10


    运算结果为 65525,图 5 所示为其运算过程。
     


    图5 对 10 位取反的运算过程


    我们可以使用如下的程序来检查这个运算结果。

    
     
    1. int i=10;
    2. System.out.printf("%d \n",~i);


    编译执行以上程序,会发现输出的结果是 -11,而不是 65525。这是因为取反之后的结果是十六进制数,而在上面的程序中使用 %d 将输出转换为了十进制数。

    可以使用如下语句查看十六进制结果。

    
     
    1. int i=10;
    2. System.out.printf("%x \n",~i);


    可以看到输出结果为 fff5,将它转换为二进制是 1111111111110101。这个二进制数的最高位为 1,表示这个数为负数。除最高位外,按位取反再加 1,即得到二进制原码 1000000000001011,用十进制数表示即为 -11。

    注意:位运算符的操作数只能是整型或者字符型数据以及它们的变体,不用于 float、double 或者 long 等复杂的数据类型。

    位移运算符

    位移运算符用来将操作数向某个方向(向左或者右)移动指定的二进制位数。表 2 列出了 Java 语言中的两个位移运算符,它们都属于双目运算符。

    表2 位移运算符
    运算符 含义 实例 结果
    » 右移位运算符 8»1 4
    « 左移位运算符 9«2 36

    左位移运算符

    左移位运算符为 «,其运算规则是:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

    例如,将整数 11 向左位移 1 位的过程如图 6 所示。
     


    图6 对 11 左移 1 位运算过程


    从图 6 中可以看到,原来数的所有二进制位都向左移动 1 位。原来位于左边的最高位 0 被移出舍弃,再向尾部追加 0 补位。最终到的结果是 22,相当于原来数的 2 倍。

    右位移运算符

    右位移运算符为 »,其运算规则是:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补零。

    例如,将整数 11 向右位移 1 位的过程如图 7 所示。
     


    图7 对 11 右移 1 位运算过程


    从图 7 中可以看到,原来数的所有二进制位都向右移动 1 位。原来位于右边的最低位 1 被移出舍弃,再向最高位追加 0 补位。最终到的结果是 5,相当于原数整除 2 的结果。

    复合位赋值运算符

    复合位赋值运算符由赋值运算符与位逻辑运算符和位移运算符组合而成。表 3 列出了组合后的复合位赋值运算符。
     

    表3 复合位赋值运算符
    运算符 含义 实例 结果
    &= 按位与赋值 num1 &= num2 等价于 num 1=num 1 & num2
    \= 按位或赋值 num1 |= num2 等价于 num 1=num 1 | num2
    ^= 按位异或赋值 num1 ^= num2 等价于 num 1=num 1 ^ num2
    ~= 按位取反赋值 num1 ~= num2 等价于 num 1=num 1 ~ num2
    «= 按位左移赋值 num1 «= num2 等价于 num 1=num 1 « num2
    »= 按位右移赋值 num1 »= num2 等价于 num 1=num 1 » num2
    展开全文
  • Java 位运算符

    2020-05-01 13:45:43
    大家好,我是大明沙利,今天就来系统的看一下Java 位运算符。 只讲能用到的,花里胡哨的没有。欢迎白嫖。 Java 位运算符 &、|、^、~、<<、>>、>>> 闲扯 关于位运算符无非也就 与(&)、...

    大家好,我是大明沙利,今天就来系统的看一下Java 位运算符。
    只讲能用到的,花里胡哨的没有。欢迎白嫖。

    Java 位运算符 &、|、^、~、<<、>>、>>>

    闲扯

    关于位运算符无非也就 与(&)、或(|)、异或(^)、取反(~)、左移(<<)、右移(>>)、无符号右移(>>>)
    位运算其实就是二进制的运算,加减乘除适用于十进制,而位运算就是二进制的运算,但是由于我们的运算都是基于十进制来说的,所以会有点绕,略微有点难懂,接下来言归正传

    关于二进制

    我们在编码过程中应该会了解很多不同的进制,除去常用的十进制,还有二进制、八进制、十六进制,因为我们的位运算符主要用到二进制,就只讲讲二进制
    几进制就是一个位上最多能表示几个数,如十进制的个位有0-9十个数字,八进制有0-7八个数字,二进制我们自然想到就是0~1两个数字
    我们编码中最小的单位应该是字节,而一个字节有8位,每一位就是一个0或1,所以一个字节用二进制表示就是
    在这里插入图片描述

    这样的

    与运算符(&)

    如果 4&7 那么这个应该怎么运算呢?
    首先我们需要把两个十进制的数转换成二进制
    4 : 0000 0100
    7 : 0000 0111

    在这里插入图片描述

    在这里要提到一点,1表示true,0表示false
    而与运算的时候相同位之间其实就是两个Boolean的运算
    全true(1),即为true(1)
    全false(0),即为false(0)
    一false(0)一true(1),还是false(0)

    或运算符(|)

    以 5|9 为例

    5 : 0000 0101
    9 : 0000 1001
    在这里插入图片描述

    在做与运算的时候
    遇true(1)就是true(1),
    无true(1)就是false(0)

    异或运算符(^)

           以 7^15 为例
           7:   0000 0111
           15: 0000 1111
    

    在这里插入图片描述

    在异或的时候
    只要相同都是false(0)
    只有不同才是true(1)

    取反运算符(~)

        例:   ~15
        同样的先变成二进制:15:0000 1111
    

    在这里插入图片描述

      这个其实挺简单的,就是把1变0,0变1
    

    注意:二进制中,最高位是符号位 1表示负数,0表示正数

    左移运算(<<)

      左移就是把所有位向左移动几位
    如:   12 << 2    意思就是12向左移动两位
          12的二进制是: 0000 1100
    

    在这里插入图片描述

    通过这个图我们可以看出来,所有的位全都向左移动两位,然后把右边空的两个位用0补上,最左边多出的两个位去掉,最后得到的结果就是00110000 结果就是48
    我们用同样的办法算 12<<3 结果是 96
    8<<4 结果是 128
    由此我们得出一个快速的算法 M << n 其实可以这么算 M << n = M * 2n

    右移运算符(>>)

    这个跟左移运算大体是一样的
    例: 12 >> 2

    在这里插入图片描述

    我们可以看出来右移和左移其实是一样的,但是还是有点不同的,不同点在于对于正数和负数补位的时候补的不一样,负数补1,正数补0
    如我们再做一个 –8 的 -8>>2

    在这里插入图片描述

    这里总结一下,关于负数或者正数来说,移位的时候是一样的,但是在补位的时候,如果最高位是0就补0,如果最高位是1就补1
    由此我们得出一个快速的算法 M >> n 其实可以这么算 M >> n = M / 2n

    无符号右移(>>>)

     无符号右移(>>>)只对32位和64位有意义
    

    在移动位的时候与右移运算符的移动方式一样的,区别只在于补位的时候不管是0还是1,都补0
    这个就不画图了

    推荐

    内容 链接
    Java基础 - java.lang.String https://blog.csdn.net/weixin_43845339/article/details/105646843
    Java基础 - 集合框架之List https://blog.csdn.net/weixin_43845339/article/details/105693694
    展开全文
  • 移位运算代码如下: package SimpleGrammar; /** * * @author jaloli * * (1)负数存储:java 等同于机器,都是用补码存,补码的规矩, * 负数 -2 ,原码为 ... * 补码是符号不变,各位取反+1,补码为 111111111
  • java 位运算符

    2020-05-11 15:09:28
    单位换算: (1.)bit:位 一个二进制数据0或1,是1bit; (2.)byte:字节 1 byte = 8 bit , 存储空间的基本计量单 一个英文字符占一个字节; (3.)1 字母 = 1 byte = 8 bit ...Java 位运算符 &
  • java位运算符

    2019-09-02 00:20:14
    位运算符 所有数据在计算机内存中都是以二进制的形式进行存储的,位运算符直接操作二进制,所以它是高效的。 位运算符:两类7个。 运算符名称 计算运算符 按位与 & 按位或 | 按位异或 ^ 取反 ~ ...
  • Java位运算符

    2019-05-01 20:20:08
    Java位运算符“有按位与”、“按位或”、“按位取反”、“按位异或”、“移位”。 位运算符除“按位与”和“按位或”运算符外,其他只能用于处理整数的操作数。位运算是完全针对位方面的操作。整型数据在内存中以...
  • java位运算符总结

    2019-01-03 12:46:03
    java位运算符 位运算符是对操作数以二进制比特位为单位进行操作和运算,操作数和结果都是整型数。 如果操作的对象是char、byte、short,位移动作发生前其值会自动晋升为int,运算结果也为int。 ~ 按位取反 先把...
  • 负数的反码是在原码基础上符号不变,其他位取反,负数补码是在反码基础上加一 例子1:求~10(byte类型) byte a = 10; 原码,补码,反码: 00001010 按位取反后 11110101 再将补码转换成源码,由于负数生成...
  • Java位运算符详解

    2019-07-12 20:14:52
    Java学习笔记----位运算符 位运算符是针对二进制的每一位进行运算的符号,专门对数字0和1操作。Java位运算符如下 运算符 运算 范例 结果 & 按位与 0&0 0 0&1 0 1&1 1 | 按位或 ...
  • 补充:位运算符(~、&、|、^,<<、>>)都是在补码(计算机存储的形式)上操作。(原答案如下) 1.二进制数在内存中是以补码的形式存放的;补码首位是符号位,0表示此数为...
  • 位运算符位运算符主要针对两个二进制数的位进行逻辑运算,它包括:与(&)、或(|)、非(~)、异或(^)** 运算规则: 计算机中的数字运算都是以补码的形式进行的,所以在做为运算时,首先将数字转换为补码形式。 ...
  • 位运算符 位运算符:对二进制的直接运算 计算机内部的数据都是以二进制形式存在的,而二进制在计算机内部又有多种编码方式 (计算机内部对二进制进行运算用的是补码) 原码:第一位是符号位 0正1负 3: 0000 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 526
精华内容 210
关键字:

java位运算符取反

java 订阅