JAVA笔记(四)-笔记2

问题

  1. 位运算的意义所在
  2. 为什么没有无符号左移
  3. 为什么要区分有符号和无符号

解答

  1. 位运算能够高效率的完成数值的计算,因为机器本身就是基于二进制的存储和计算,所有的数值或者对象最终都要转化为二进制,对象的话,可能需要一些编解码的动作(这里说的就是ASCII表),位运算主要是针对数据运算的,而吧人们熟悉的数字转化为机器熟悉的数字,其中又牵扯到原码,反码和补码,补码的出现是为了减低机器运算的复杂度,把减法转变为加法,可以这么说机器运算只有加法和移位,乘法最终是通过加法和移位操作完成的,而除法首先转变为乘法。
    其中需要注意的是,反码的出现是为了解决正负相加等于0 的问题,而补码的出现是为了解决正负0的问题。所以现在的计算机底层逻辑单元计算和存储都是以补码形式存在的。
  2. 解答可以看这篇文章,但是我看了这篇文章还是没搞懂,妈的为啥没有无符号左移啊,无符号右移是可以将一个负数变成一个正数,但是无符号左移可以将负数变成正数,正数变成负数啊。擦,难道是大局观???
  3. 看网上资料说是无符号右移 ,在众多散列、加密、压缩、影音媒体编码、序列化格式都会用到。等日后内功深厚了在回来看这些问题

注意事项

在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次数和64的余数,也就是移动66次和移动2次得到的结果相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值