计算机基础之位移运算

计算机基础之位移运算1 前言二进制整数最终都是以补码的形式呈现的 正数的最高位是 0 负数的最高位是 1 正数的原码 补码 反码都一样 负数的反码为原码取反 补码为反码加 1 位移运算有两种 一种是带符号位移运算一种是不带符号位移运算 2 带符号位移运算 lt 与 gt 带符号位移运算分为 lt lt 左移 与 gt gt 右移 这两种位移 都是针对补码运算 符号位均参与位移运算 除 与

1.前言

二进制整数最终都是以补码的形式呈现的。正数的最高位是0,负数的最高位是1。正数的原码,补码,反码都一样。负数的反码为原码取反,补码为反码加1。位移运算有两种,一种是带符号位移运算一种是不带符号位移运算。

2.带符号位移运算(<< 与 >>)

带符号位移运算分为<<(左移)与>>(右移)。这两种位移,都是针对补码运算,符号位均参与位移运算,右移除负数往高位补1之外,其余位置都补0,而左移不管是正数还是负数,空位都补0,所以左移过程中,负数有可能变成正数,正数有可能会变成负数,自己体会一下。不分正负:针对偶数一般右移一位就是除2,左移一位是乘2,针对奇数,右移一位就是除2-1,减一因为多余一位被直接抹除了,左移一位也是乘2。请看以下示例:

  • 35
    原码:00              ~~~~~~~~~~~~             >>1(补码右移一位):00010001=17(2的0次方+2的4次方)
    补码:00              ~~~~~~~~~~~~             <<1(补码左移一位):0=70
    反码:00






  • -35(负数)
    负数比较特殊,这里来特殊说明一下:
    (1)首先说明原码:
    35的原码我们知道是00,所以-35的原码是(最高位是符号位,负数的符号位是1,其余位跟正数是一样的)。
    (2)再说反码:
    负数的反码是负数的原码取反,所以-35的反码为(高位仍然不变,负数一直是1,其他取反)。
    (3)再说补码:
    负数的补码是反码加一,所以-35的补码是。所以:














“>>1”(补码右移一位)=(负数右移,高位补1),转成原码=(补码减一,然后取反)= -18

“<<1”(补码左移一位)=,转成原码= = -70

2.不带符号位移运算,只有右移运算(>>>),不存在左移运算。

不带符号位的位移运算,即没有把最高位当成是一个符号位,正常移动计算。不论正数还是负数,空位都补0。正数无符号右移的最小值是0,负数无符号右移的最小值是1。如果位移的位数=类型本身的位数(整形int是32位,长整形long是64位),那么就还是值本身,所以针对Int类型的负数的最小值是右移31位时得到的1。请看以下示例:

最后,喜欢动手的可以自己多找几个数运行一下试试,这样能加强记忆。附上转二进制的调用方法:

String m = Integer.toBinaryString(-35<<1); String n = Integer.toBinaryString(-35>>1); 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207914.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午12:48
下一篇 2026年3月19日 下午12:48


相关推荐

  • Java实现静态代理[通俗易懂]

    Java实现静态代理[通俗易懂]使用静态代理时需要让目标对象和代理对象一起实现相同的接口或者继承相同的父类。这样做的目的就是为了通过调用代理对象中和目标对象相同的方法来实现调用目标对象的方法,从而达到代理的效果。第一步定义接口publicinterfaceIStatictProxy{voidprint();}第二步实现接口(目标对象)@Slf4jpublicclassTargetImplimplementsIStatictProxy{@Overridepublic

    2022年10月16日
    6
  • kong简介_意大利kong

    kong简介_意大利kongKong简介Kong是一款基于OpenResty(Nginx+Lua模块)编写的高可用、易扩展的,由Mashape公司开源的APIGateway项目。Kong是基于NGINX和ApacheCassandra或PostgreSQL构建的,能提供易于使用的RESTfulAPI来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Se…

    2022年4月19日
    67
  • linux 命令chmod 755的意思[通俗易懂]

    linux 命令chmod 755的意思[通俗易懂]chmod是Linux下设置文件权限的命令,后面的数字表示不同用户或用户组的权限。 一般是三个数字:第一个数字表示文件所有者的权限第二个数字表示与文件所有者同属一个用户组的其他用户的权限第三个数字表示其它用户组的权限。      权限分为三种:读(r=4),写(w=2),执行(x=1)。综合起来还有可读可执行(rx=5=4+1)、可读可写(rw=6=4+2)、可读可写可执行(…

    2022年7月16日
    35
  • BigDecimal 乘法问题

    BigDecimal 乘法问题直接用我的代码和结果描述一下问题吧 代码 Createdbyzha aeon2016 5 17 publicclassD publicstatic String args BigDecimala newBigDecima BigDecima

    2026年3月19日
    3
  • 碰撞检测经典解决方案

    碰撞检测经典解决方案碰撞检测在3D游戏中至关重要,好的碰撞检测要求人物在场景中可以平滑移动,遇到一定高度内的台阶可以自动上去,而过高的台阶则把人挡住,遇到斜率较小的斜坡可以上去,斜率过大则把人挡住,在各种前进方向被挡住的

    2022年7月3日
    39
  • linux nohup 命令详解

    linux nohup 命令详解nohup 命令及其输出文件 nohup 命令 如果你正在运行一个进程 而且希望退出账户时该进程不会结束 那么可以使用 nohup 命令 该命令可以在你退出账户 关闭终端之后继续运行相应的进程 nohup 就是不挂起的意思 nohangup 一般在 linux 下 nohup 格式 nohupcommand 或者 nohupcommand amp 这之间的差别是带 amp 的命令行 即

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号