C语言左移右移操作符
目录
一.整数在内存中的存储方式
1.原码,补码,反码
2.注意事项
二.操作符
1.左移操作符
2.右移操作符
先介绍整数在内存中的存储方式
一.整数在内存中的存储方式
数子的表示方法主要有原码,补码,反码三种,在内存中的存储形式为其补码形式,均以二进制形式表示
1.原码,补码,反码
a.首先是源码:对于整数来说,原码即为其二进制形式,例如:十进制5的原码为101,又因为一个整型在内存中占4个字节,32个比特位,因此数字5在内存中的存储应为00000000000000000000000000000101,十进制数字-5应表示为10000000000000000000000000000101.注意,32比特位首位又称符号位,规定正数首位为0,负数为1.
b.其次是反码:对于正整数来说,补码,源码,反码是相同的。对于负数来说,其在内存中以其源码的补码存放。下面介绍原码-->反码的转换:对于正数,补码原码反码相同;对于负数,可先写出其原码,然后对位取反,符号位不变即可,例如十进制-5原码转换为反码后为11111111111111111111111111111010.
c.最后是补码:同样对于正整数来说,补码,源码,反码是相同的,不在解释。对于负数来说,补码=反码+1,例如,对于数字-5来说,其补码为11111111111111111111111111111011.
2.注意事项
对于正整数来说,补码,源码,反码是相同的***
二.操作符
1.左移操作符
左移操作符:<<
规则:正数二进制左移1 ,负数补码左移一,符号位不变,右端空位补零
左移是指将二进制位向左移动一位同时最后空出来的一位补零。下面以实例演示:例如,十进制数字5,二进制为00000000000000000000000000000101,现左移一位,即变成00000000000000000000000000001010,转换成二进制数字应为10;再看负数,例如-5,左移一位后保留符号位不变,右端补零,应为-10;附上代码验证:
正数:#define _CRT_SECURE_NO_WARNINGS 1#pragma warning(disable:6031)#include<stdio.h>int main(){int a = 5;int b = a << 1;//左移一位printf("%d", b);return 0;}负数:#define _CRT_SECURE_NO_WARNINGS 1#pragma warning(disable:6031)#include<stdio.h>int main(){int a = -5;int b = a << 1;//左移一,符号位不变,右端补零printf("%d", b);return 0;}
2.右移操作符
右移操作符:>>
分为:算数右移和逻辑右移
介绍:算数右移,计算机系统以算数右移为主
规则:右移末尾舍弃,高位补符号位
仍看例子,例如正整数5,存储2进制为00000000000000000000000000000101,右移一位后变成00000000000000000000000000000010,对应十进制为2。再例如负整数-5,左移后高位补符号位,低位舍弃,-5对应的原码:
10000000000000000000000000000101;反码:111111111111111111111111111111111010
;补码111111111111111111111111111111111011,补码右移1位后变成111111111111111111111111111111111101,对应的反码:111111111111111111111111111111111100,对应的原码:
10000000000000000000000000000011,及二进制-3.下边附上验证代码:
5:#define _CRT_SECURE_NO_WARNINGS 1#pragma warning(disable:6031)#include<stdio.h>int main(){int a = 5;int b = a >> 1;//原码=反码=补码,原码右移一位,舍弃低位,结果为2printf("%d", b);return 0;}-5:#define _CRT_SECURE_NO_WARNINGS 1#pragma warning(disable:6031)#include<stdio.h>int main(){int a = -5;int b = a >> 1;//右移一位,补码符号位不变,舍弃低位,结果为-3printf("%d", b);return 0;}
C语言左移右移操作符相关推荐
- C语言操作符—左移右移操作符
文章目录 1.移位操作符 十进制转二进制 1.2 << 左移操作符 1.2.1 >> 左移操作符 -- 正数 1.2.2 >> 左移操作符 -- 负数 1.3 &g ...
- C语言左移右移 << >>
C/C++语言中逻辑右移和算数右移共享同一个运算符>>.编译器决定使用逻辑右移还是算数右移,根据的是运算数的类型. C/C++中没有循环左移和循环右移打操作符,需要自己实现.
- C/C++混淆点-左移右移操作符
对一个数实行左移或者右移操作,即先把操作数转换为二进制,然后左移(>>)即从左到右开始舍弃,右移(<<)即从各位之后开始加0.最后再转换为十进制. #include<io ...
- c语言左移右移运算符详解
对于负数的右移:因为负数在内存中是以补码形式存在的,所以首先根据负数的原码求出负数的补码(符号位不变,其余位按照原码取反加1),然后保证符号位不变,其余位向右移动到X位,在移动的过程中,高位补1.等移 ...
- C语言:左移操作符和右移操作符
#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h> int main() {//左移操作符:将操作数的二进制左相应的位数,后面补0int ...
- c语言负数左移右移_C语言位运算符:与、或、异或、取反,左移和右移
C语言位运算符:与.或.异或.取反.左移和右移 个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. ,则该位的结果值为1,否则为0 | ...
- 单片机c语言左移的作用,单片机c语言中的左移右移
// 据说有些编译器采用逻辑右移,即左端补0 结果:a = 0xe3 (11100011) 1当左移移出的是"1"而不是0时,你该怎么想? 2 当左移的操作数是一个sign型是,你 ...
- 单片机c语言左移的作用,[转载]单片机c语言中的左移右移
单片机c语言中的左移右移 左移 变量1 << 变量2 将变量1的二进制位值向左移动由变量2所指定的位数. 例如: a = 0x8f; // 10001111 a << 2; / ...
- c语言左移15位,关于c语言中左移右移运算符的问题
参照<c与指针>,在c语言中左移时,不论算术左移还是逻辑左移效果都是相同的.而且对于有符号和无符号类型执行相同的操作,即按照二进制位向左左移N位.例如: 1 clude 2 intmain ...
最新文章
- ASP.NET获取IP的6种方法
- Kotlin Gson解析泛型对象
- Verilog中case,casex,casez的区别
- 骂骂咧咧的 fastreport 数据隔行换色
- 多线程生成随机数组+双线程归并排序(C++实现)
- 202. Happy Number
- Spring Boot——控制台LOGO自定义配置管理解决方案
- C++counting sort计数排序(针对string)的实现算法(附完整源码)
- Java I/O体系原理
- web程序入门五(http无状态)
- SQL注入学习part06:(结合sqli-libs学习:51-61关)
- Android 上哪个更好:除以 2 还是位移 1?
- python自学行吗-没有编程基础,可以自学Python吗?
- svn添加提交备注限制和自动发布web项目
- Spring AOP(二)之AfterReturning增强处理
- springmvc的运行原理个人见解
- 数学建模算法与应用 数理统计
- 【美赛】美赛字体格式和排版要求
- wampserver大红色橘色变成绿色
- OpenGL(十三)——Qt OpenGL绘制三维图形