文章目录

  • 1、移位操作符
    • 十进制转二进制
  • 1.2 << 左移操作符
    • 1.2.1 >> 左移操作符 —— 正数
    • 1.2.2 >> 左移操作符 —— 负数
  • 1.3 >> 右移操作符
  • `注意:移位操作符的操作数只能是整数`

1、移位操作符

移位操作符移动的是二进制位
只支持整数不支持浮点数

十进制转二进制

123

十进制的 123
从右往左 下标
3 x 100 = 3
2 x 101 = 20
1 x 102 = 100
3 x 100+2 x 101+1 x 102 = 123

  1. 第一位为符号位
  2. 负数为1
  3. 整数为0

7
00000000 00000000 00000000 00000111 -原码
00000000 00000000 00000000 00000111 - 反码
00000000 00000000 00000000 00000111 - 补码
-7
10000000 00000000 00000000 00000111 -原码
11111111 11111111 11111111 11111000 ——反码(源码的符号位不变,其它位按位取反就是反码)
11111111 11111111 11111111 11111001 ——补码(反码加1)
整数在内存中存储的是补码


1.2 << 左移操作符

左移数字会变大
左边丢弃,右边补零

1.2.1 >> 左移操作符 —— 正数

7
00000000 00000000 00000000 00000111 — 补码 左移后
0-弃 00000000 00000000 00000000 00000111 0-补
00000000 00000000 00000000 00001110 — 补码左移后
1x23+ 1x22 + 1x21 + 0x20 = 14 — 计算后


1.2.2 >> 左移操作符 —— 负数

左边丢弃,右边补零
计算机内存中是补码
负数的补码进行左移后,将补码变反码,反码变原码,计算就好了,符号位不变。

-7
11111111 11111111 11111111 11111001 — 补码
11111111 11111111 11111111 11110010 — 补码左移后(左弃右补)
11111111 11111111 11111111 11110001 — 反码(补码-1)
10000000 00000000 00000000 00001110 — 原码
1x23 + 1x22 + 1x21 + 1x20 = -14 — 结果


1.3 >> 右移操作符

右移会变小

算术移位 — 右边丢弃,左边补原符号位
逻辑移位 — 右边丢弃,左边补0
究竟算术移位还是逻辑移位取决于编译器

7
00000000 00000000 00000000 00000111 — 补码
00000000 00000000 00000000 00000011 — 补码右移后
1x21+1x20 = 3

-7
11111111 11111111 11111111 11111001 — 补码
11111111 11111111 11111111 11111100 — 补码右移后
11111111 11111111 11111111 11111011 — 反码(补码-1)
10000000 00000000 00000000 00000100
1x22+0x21+0x20 = -4

int main()
{int a = 7; int a = -7; int b = a >> 1;printf("a = %d\n",a);printf("b = %d\n",b);
}

注意:移位操作符的操作数只能是整数

(点击跳转)

C语言操作符—左移右移操作符相关推荐

  1. C语言左移右移操作符

    目录 一.整数在内存中的存储方式 1.原码,补码,反码 2.注意事项 二.操作符 1.左移操作符 2.右移操作符 先介绍整数在内存中的存储方式 一.整数在内存中的存储方式 数子的表示方法主要有原码,补 ...

  2. C语言:左移操作符和右移操作符

    #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h> int main() {//左移操作符:将操作数的二进制左相应的位数,后面补0int ...

  3. c语言负数左移右移_C语言位运算符:与、或、异或、取反,左移和右移

    C语言位运算符:与.或.异或.取反.左移和右移 个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. ,则该位的结果值为1,否则为0 | ...

  4. c语言左移15位,关于c语言中左移右移运算符的问题

    参照<c与指针>,在c语言中左移时,不论算术左移还是逻辑左移效果都是相同的.而且对于有符号和无符号类型执行相同的操作,即按照二进制位向左左移N位.例如: 1 clude 2 intmain ...

  5. c语言中左移右移有什么作用,C语言中左移和右移运算符详细介绍

    搜索热词 C语言中左移和右移运算符详细介绍 左移运算符(< 左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负值),其右边空出的位用0填补,高位左移溢出 ...

  6. c语言负数左移右移_C语言左移和右移

    事情的发生: 某日工作中有个需求是将不同的数值存到char的前4位和后4位中. 恰好同事中有同样取得32位int的前8位当成一个数值的代码: //取得32位中的高八位组成的值 #define U32_ ...

  7. c语言右移高位如何补1,c语言负数左移右移

    事情的发生: 某日工作中有个需求是将不同的数值存到char的前4位和后4位中. 恰好同事中有同样取得32位int的前8位当成一个数值的代码: //取得32位中的高八位组成的值 #define U32_ ...

  8. C/C++混淆点-左移右移操作符

    对一个数实行左移或者右移操作,即先把操作数转换为二进制,然后左移(>>)即从左到右开始舍弃,右移(<<)即从各位之后开始加0.最后再转换为十进制. #include<io ...

  9. C语言编程技巧 --- C语言中左移右移与乘除法的比较

    C语言中右移与除法的比较 最近在做项目的时候,遇到了一个有趣的现象.那就是,对于除2的整数次幂的操作而言,为了加快计算速度,一般情况下,会用右移(>>)来替代除法(/).但实际上,在VS中 ...

最新文章

  1. wxWidgets:wxFilePickerCtrl类用法
  2. Fiori Launchpad etag retrieve logic - UI5 Repository
  3. HDOJ1861 游船出租
  4. 前端学习(1159):对象结构02
  5. 戴明理论、朱兰理论、克鲁斯比理论和田口玄一理论
  6. 安装kepserver找不到根证书_考完二手车评估师证书却找不到工作,面试官的话让我记忆犹新!...
  7. 设计模式六大原则-OCP
  8. 值得推荐的13款可视化软件,快收藏!
  9. 中国单箱梁体最宽矮塔斜拉桥合龙
  10. oracle client 客户端 安装 oracle客户端安装
  11. 阿里矢量icon的用法步骤
  12. Facemark:使用OpenCV进行面部特征点检测
  13. oracle移动文件命令是什么意思,Oracle使用命令移动各类文件的方法
  14. 希捷 sshd 微型计算机,希捷2TB SSHD拆解/核心技术分析_希捷 Desktop 2TB 7200转 8GB混合硬盘_内存硬盘-中关村在线...
  15. VMware vSphere的相关知识
  16. MOTT消息协议的学习
  17. 【论文阅读】自然语言生成(NLG)——基于plan思想的Data2Text任务实现
  18. Windows 环境JDK环境配置
  19. 计算机仿真三个基本活动,计算机仿真-Read.ppt
  20. 【测试沉思录】11. 如何进行基准测试?

热门文章

  1. VBReFormer-SEO狼术
  2. 使用压缩工具打包程序,并设置添加快捷方式
  3. [Linux基础与服务管理——常用集群高可用软件 Keepalived]
  4. 完全立方体计算的多路数组聚集
  5. x10max能升级鸿蒙系统吗,3部能直接升级鸿蒙2.0的荣耀旗舰,第一没有意外,第三实力最强...
  6. 定义“超级创始人”:195家十亿美元初创公司,65个数据维度,100张不应错过的图表
  7. java中thread类定义在哪个包中,Thread类位于下列哪个包中?()A、javA、ioB、javA、langC、j......
  8. 淘宝店铺提升权重怎么做?大神导航,一个神奇的网站,从此开启大神之路!
  9. CSDN论坛学习工具(CSDN Study v1.0.0.2版)发布
  10. four///////