有符号整数的移位操作(按其补码移位规则进行操作)

2023-05-16

【知识点】
算法运行时,输入的整数
默认情况下被计算机系统表示为有符号整数。有符号整数的二进制表示中,最高位为符号位(正整数为0,负整数为1),这也是有符号整数名称的由来。有符号整数移位时,按照补码的移位规则进行移位。即:

当有符号整数进行位运算“
左移(<<)”时,规则是“符号位不变,移出位丢弃,空出位补0”。即正整数左移N位时低位依次填充N个0,负整数左移N位时低位依次填充N个0。例如:
0000 0010 << 1 = 0000 0100  
0000 1010 << 2 = 0010 1000 
1000 0010 << 1 = 1100 0100   
1000 1010 << 3 = 1101 0000

当有符号整数进行位运算“
右移(>>)”时,规则是“符号位不变,移出位丢弃,空出位补符号位”。即正整数右移N位时高位依次填充N个0,负整数右移N位时高位依次填充N个1。例如:
0000 0010 >> 1 = 0000 0001  
0000 1010 >> 2 = 0000 0010 
1000 0010 >> 1 = 1100 0001   
1000 1010 >> 3 = 1111 0001

或者,总结为“当有符号整数进行位运算“
左移(<<)”时,规则是“符号位不变,移出位丢弃,空出位补0”。当有符号整数进行位运算“右移(>>)”时,规则是“符号位不变,移出位丢弃,空出位补符号位”。

--------------------------------------------------------
左移的特殊情况:
左移里一个比较特殊的情况是当左移的位数超过该数值类型的最大位数时,编译器会用左移的位数去模类型的最大位数,然后按余数进行移位。如:
int i=1; //设int为32位
i=i<<33; // 33%32=1,左移1位,i变成2

正数的反码等于其原码。正数的补码等于其原码。 负数的反码等于对负数原码符号位以外的各位取反(0变1,1变0)。负数的补码等于负数反码加1。

 

【参考文献】
https://blog.csdn.net/WUYAN889/article/details/106099693
https://blog.csdn.net/hnjzsyjyj/article/details/110148954

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有符号整数的移位操作(按其补码移位规则进行操作) 的相关文章

  • 在Harvester上安装windows sever 2012 r2

    安装Windows Server 2012 r2 文章目录 安装Windows Server 2012 r2新建虚拟机配置基础信息配置卷配置网络开机 xff0c 进入安装系统步骤安装磁盘驱动安装网络驱动安装其他驱动测试网络 Harveste
  • SDU 程序设计思维实践 第四周 csp模拟

    文章目录 题目A 咕咕东的奇遇题意InputOutput 思路总结代码 题目B 咕咕东想吃饭题意InputOutput 思路总结代码 题目C 可怕的宇宙射线题意InputOutput 思路总结代码 题目A 咕咕东的奇遇 题意 咕咕东是个贪玩
  • 使用MySQL8.0 by docker

    MySQL8 0 by Docker 拉取镜像 span class token function docker span pull mysql 8 0 为了获取到对应的配置文件而 docker run span class token f
  • 国内安装oh-my-zsh

    zsh有华丽的外表 xff0c 使用便捷的特点 xff0c 但在国内网络环境中 xff0c 安装会存在困难 xff0c 使用zsh官网提供的脚本安装 xff0c 基本会安装失败 xff0c 会显示报访问错误 xff0c 在此提供使用Git安
  • 使用kubeKey快速搭建Kubernetes集群

    使用kubeKey快速搭建Kubernetes集群 文章目录 使用kubeKey快速搭建Kubernetes集群一 安装 kk二 初始化本地主机 xff08 官方没写 xff09 三 安装集群3 1 All in One 测试集群无配置文件
  • 使用docker运行mysql-client

    使用docker运行mysql client 由于服务器环境的限制的 xff0c 能少污染主机环境就尽量不污染 xff0c 在集群环境 xff0c 使用docker运行mysql cli 访问通过NodePort暴露的数据库就是一个不错的方
  • CentOS 快速安装Docker

    CentOS 快速安装Docker 下载及安装 yum span class token function install span span class token function wget span y span class toke
  • 使用Docker快速搭建MSSQL实验环境 (持久化)

    使用Docker快速搭建MSSQL实验环境 xff08 持久化 xff09 前置章节 CentOS 快速安装Docker 使用Docker快速搭建MSSQL实验环境 拉取镜像 span class token function docker
  • 使用Docker快速搭建Oracle实验环境(持久化)

    容器镜像系统用户root密码为 helowin su root helowin 运行及配置 仅限测试环境 1 拉取镜像 span class token function docker span pull registry cn hangz
  • SHELL内涵段子

    1 字符掩码 xff0c 过滤掉不需要的 Database span class token assign left variable DATABASE MASK span span class token operator 61 span
  • Shell中读取文本文件

    读取文本文件 基础范式 span class token function cat span filename span class token operator span span class token keyword while sp
  • MySQL有点用的Shell片段

    获取Table Schema mysql span class token parameter variable uroot span p span class token variable passwd span span class t
  • switch语句作用在byte上却不能作用在String和long上

    在switch xff08 exprl xff09 语句中 xff0c exprl必须是一个整数表达式或者枚举常量 而byte short char都可以隐式转换为int类型 xff0c 整数表达式可以是int或者包装类Integer xf
  • MySQL批量测试账号密码

    账号密码文件 user txt root pass 64 1234 root pass 64 1234 root pass 64 1234 root pass 64 1234 run sh span class token shebang
  • MySQL连接过慢优化

    在配置文件my cnf中加上skip name resolve span class token punctuation span mysqld span class token punctuation span span class to
  • stm32的GPIO口PA0按键没按下就是低电平的分析

    芯片 xff1a stm32f407ZET6X 功能 xff1a 实现两按键分别控制四个灯和一个蜂鸣器 思路 xff1a 将寄存器设置封装成函数 xff0c 体会固件库的实现原理 踩坑记录 xff1a 下载程序后发现与PA0连接的按键 xf
  • 正点原子f103新建工程模板——基于固件库

    编译器版本要选对 xff0c 1 xff0c 原来的MDK版本5 15 xff0c 使用的V5编译器 xff1b 新的MDK5 26使用的是V6编译器 xff1b 2 xff0c 在5 26版本下 xff0c ARM Compiler选择V
  • stm32f103-gpio源码理解

    提要 xff1a 参照野火的stm32f103开发指南 xff0c 对标准库的构造进行理解 xff1a xff08 1 xff09 使用结构体 xff0c 使用宏 xff0c 使用枚举 xff08 2 xff09 因为参数是可变的 xff0
  • c语言变量的存储方式和生存期 -考察

    全局变量和局部变量 1 局部变量 xff08 讨论在一个C源文件中 xff09 1 xff09 who is 局部变量 xff1a a 函数内定义的变量 b 函数内的复合语句内定义的变量 c 函数的形参 类比 xff1a a 酒店的住客房间

随机推荐