C语言操作符—左移右移操作符
文章目录
- 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
- 整数为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语言操作符—左移右移操作符相关推荐
- C语言左移右移操作符
目录 一.整数在内存中的存储方式 1.原码,补码,反码 2.注意事项 二.操作符 1.左移操作符 2.右移操作符 先介绍整数在内存中的存储方式 一.整数在内存中的存储方式 数子的表示方法主要有原码,补 ...
- C语言:左移操作符和右移操作符
#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h> int main() {//左移操作符:将操作数的二进制左相应的位数,后面补0int ...
- c语言负数左移右移_C语言位运算符:与、或、异或、取反,左移和右移
C语言位运算符:与.或.异或.取反.左移和右移 个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. ,则该位的结果值为1,否则为0 | ...
- c语言左移15位,关于c语言中左移右移运算符的问题
参照<c与指针>,在c语言中左移时,不论算术左移还是逻辑左移效果都是相同的.而且对于有符号和无符号类型执行相同的操作,即按照二进制位向左左移N位.例如: 1 clude 2 intmain ...
- c语言中左移右移有什么作用,C语言中左移和右移运算符详细介绍
搜索热词 C语言中左移和右移运算符详细介绍 左移运算符(< 左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负值),其右边空出的位用0填补,高位左移溢出 ...
- c语言负数左移右移_C语言左移和右移
事情的发生: 某日工作中有个需求是将不同的数值存到char的前4位和后4位中. 恰好同事中有同样取得32位int的前8位当成一个数值的代码: //取得32位中的高八位组成的值 #define U32_ ...
- c语言右移高位如何补1,c语言负数左移右移
事情的发生: 某日工作中有个需求是将不同的数值存到char的前4位和后4位中. 恰好同事中有同样取得32位int的前8位当成一个数值的代码: //取得32位中的高八位组成的值 #define U32_ ...
- C/C++混淆点-左移右移操作符
对一个数实行左移或者右移操作,即先把操作数转换为二进制,然后左移(>>)即从左到右开始舍弃,右移(<<)即从各位之后开始加0.最后再转换为十进制. #include<io ...
- C语言编程技巧 --- C语言中左移右移与乘除法的比较
C语言中右移与除法的比较 最近在做项目的时候,遇到了一个有趣的现象.那就是,对于除2的整数次幂的操作而言,为了加快计算速度,一般情况下,会用右移(>>)来替代除法(/).但实际上,在VS中 ...
最新文章
- ORA-12919: Can not drop the default permanent tablespace
- 系统架构师学习笔记_第二章_连载
- 10分钟弄懂深度学习:卷积与特征提取
- 详解集合之HashMap——HashMap内部结构,自动扩容机制,为什么需要重写hashcode和equals方法
- Android推荐的几本书
- 线性表的定义和基本运算之线性结构
- 时间序列聚类方法的研究
- (34)FPGA分频设计-奇数分频(第7天)
- 电商促销海报BANNER设计要点,万能套用PSD分层模板,先收好!
- Java使用iText生成word文件的解决方案
- html前沿技术网页,HTML5新技术给网站带来了哪些改变
- 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第3节 maven标准目录结构和常用命令_06maven标准目录结构...
- plc vb c语言编程,【实例】VB实现plc与上位机通讯应用程序
- Nginx 作为静态资源服务器,配置静态资源下载
- 模拟退火算法求解最优化问题
- android全面屏像素密度,手机屏幕分辨率、PPI像素密度科普知识大全
- Unity属性(Attributes)
- IDEA自定义带JavaDoc的getter/setter模板
- Win11添加日语输入法的教程
- 笔记本电脑无法进入睡眠状态_电脑进入睡眠模式后无法唤醒的原因解析
热门文章
- EasyTable组件,Delphi 和 C++ Builder-SEO狼术
- 从资源配置的角度理解IT领域的一些场景
- OpenGL(十五) OpenCV+OpenGL实现水面倒影
- JVM性能监控工具 - jhat
- 就业信息追踪|基于Springboot+Vue开发实现就业信息追踪系统
- wps表格将多个sheet页合并为一个sheet页(需安装wpsVB插件)
- css实现字体、盒子发光
- 高效使用google及提问
- java如何把字符串变成整数_Java 实现把字符串转换成整数
- Linux - 命令的查找 find命令详解