文章目录

  • 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. ORA-12919: Can not drop the default permanent tablespace
  2. 系统架构师学习笔记_第二章_连载
  3. 10分钟弄懂深度学习:卷积与特征提取
  4. 详解集合之HashMap——HashMap内部结构,自动扩容机制,为什么需要重写hashcode和equals方法
  5. Android推荐的几本书
  6. 线性表的定义和基本运算之线性结构
  7. 时间序列聚类方法的研究
  8. (34)FPGA分频设计-奇数分频(第7天)
  9. 电商促销海报BANNER设计要点,万能套用PSD分层模板,先收好!
  10. Java使用iText生成word文件的解决方案
  11. html前沿技术网页,HTML5新技术给网站带来了哪些改变
  12. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第3节 maven标准目录结构和常用命令_06maven标准目录结构...
  13. plc vb c语言编程,【实例】VB实现plc与上位机通讯应用程序
  14. Nginx 作为静态资源服务器,配置静态资源下载
  15. 模拟退火算法求解最优化问题
  16. android全面屏像素密度,手机屏幕分辨率、PPI像素密度科普知识大全
  17. Unity属性(Attributes)
  18. IDEA自定义带JavaDoc的getter/setter模板
  19. Win11添加日语输入法的教程
  20. 笔记本电脑无法进入睡眠状态_电脑进入睡眠模式后无法唤醒的原因解析

热门文章

  1. EasyTable组件,Delphi 和 C++ Builder-SEO狼术
  2. 从资源配置的角度理解IT领域的一些场景
  3. OpenGL(十五) OpenCV+OpenGL实现水面倒影
  4. JVM性能监控工具 - jhat
  5. 就业信息追踪|基于Springboot+Vue开发实现就业信息追踪系统
  6. wps表格将多个sheet页合并为一个sheet页(需安装wpsVB插件)
  7. css实现字体、盒子发光
  8. 高效使用google及提问
  9. java如何把字符串变成整数_Java 实现把字符串转换成整数
  10. Linux - 命令的查找 find命令详解