关于 二进制运算符

  • 前言
    感觉自己才刚刚开始接触这个博客文章,写起来有点生疏。有时不知道如何去写,自己对于知识的理解也不是很全面。就连标题都不知道如何写。

  • 二进制介绍
    虽然计算机计算都是二进制语言但是做java开发往往都是十进制计算,上次我说自己要写一个关于二进制的文章,一个同学就说先给我介绍一下什么叫二进制数,我想了半天都不知道如何形容二进制数,二进制就是计算机表达的数字啊,我为什么要介绍二进制?我把二进制转十进制不就OK了吗?其实在计算机里面最小的单位是位 bit 用位数来表示二进制数。 比如说 1 在二进制里面也就是 1,到了2 的时候就不一样了 正常我们接触到的十进制是2 二进制逢二进一 就为 10。3 表示 11 、4表示100、5表示 101、6表示 110,7表示111,8表示 1000。

  • 二进制的一般比较运算符
    在java里面对于二进制运算有<< 、<<< 、>>、 >>> 、& 、~、^、| 左移符号,无符号左移、右移符号、无符号右移、与 、 非 、异或 、 或,后面两个有个好理解的名称是 | 可以表示为 归一 和 & 表示为 归零。

  • 一些可以立马计算的二进制
    对于一般二进制我们看到了用肉眼快速计算 比如 1111 1111 则为256 是一个字节最大的数 1010 则为10 二进制快速运算 方法是把二进制组成4bit 比如 1 就表示为0001 、2表示为 0010 、4表示为 0100 、8表示为 1000 对于这样的数我们可以快速运算 ,1010 就是 8+2 1000 +0010 这样的表达形式可以称为 8421 码。

  • 开始计算
    感觉自己已经说了很多废话了,但是还没有介绍运算符,对于左移和右移其实很好理解,右移变小,左移变大 。不管是左移还是右移都是2的倍数变化,逢二进一
    所以如果是 8>>2 为那么就是 2 就是除以2的2次方, 8>>3 就是1了 ,8<<3 就是64了 ,至于>>> 就是说其它位补0 忽略符号。
    &
    与 这个用来比较两个数的二进制的,比如1010 和 1000 之前说了这个叫归零,只要有一个是0就是零, 所以这两数之间的比较是 得出来的是1000,
    ~
    非就是自身比较,取相反的数,1010 的非就是0101。本身是这样的那么我就取自己不一样的,
    |
    或 就是我之前说的归一只要有一个是1 那么就是1 还是以 1010 和 1000 为例 那么这两个数比较就是 1010了。

    ^(这个有点难理解了)
    异或(疑惑)这也是比较两个数的二进制的,相同的就是0 不同的就是1这个地点会有一点点混淆,不知道你们会不会,反正我计算的时候有一点。

  • 补码(java 二进制负数那些事)
    java里面有表示负数的,但是刚刚接受的并没有说负数怎么表示,在java里面最高是1的时候表示为负数,那么问题来了我怎么知道最高位呢?在java数据类型中每一种类型都是规定好的字节,byte 、short 、int 、long 分别是 1、2、4、8个字节,所以分别对应8、16、32、64位,就很好理解了。
    但是负数不单单是高位变为负一这个就和~有关系了
    比如 byte a=-1,如果只是单独的高位变为1,那就是 1000 0001 但是实际上是 1111 1111 。
    或者 byte a=-127 把高位变为1 那就应该是 1111 1111 实际却是 10000001 刚才的恰好相反,这个称为补码方式,也就是我们进行~的时候然后再加上一个1。就是对应的负数了
    下面敲点代码吧

   public static void  mian(String[] args){
	  int  a =8;//java 的int 都是32位所以8 0000 0000 0000 0000 0000 0000 0000 1000
      char b=0xA;//10进制的10 这个是两个字节
       byte c =10;//1字节 8位
    System.out.println(a^b);//2   1000   1010  ==> 0010
    System.out.println(a|b);//10   1000  1010  ==> 1010
    System.out.println(~1);//-11 0000 0000 0000 1010  1111 1111 1111 0101 这个相当于补码补码是用来表示负号的
    System.out.println(b&a);//8
	} 
  • 总结
    java的运算都是在二进制上面的,但是二进制在计算小数的时候有偏差。这个得深入理解计算机语言了,我就不介绍(主要是自己也不会);用的多的也就是归一和归零的二进制比较符了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值