目录

一.整数在内存中的存储方式

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语言左移右移操作符相关推荐

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

    文章目录 1.移位操作符 十进制转二进制 1.2 << 左移操作符 1.2.1 >> 左移操作符 -- 正数 1.2.2 >> 左移操作符 -- 负数 1.3 &g ...

  2. C语言左移右移 << >>

    C/C++语言中逻辑右移和算数右移共享同一个运算符>>.编译器决定使用逻辑右移还是算数右移,根据的是运算数的类型. C/C++中没有循环左移和循环右移打操作符,需要自己实现.

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

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

  4. c语言左移右移运算符详解

    对于负数的右移:因为负数在内存中是以补码形式存在的,所以首先根据负数的原码求出负数的补码(符号位不变,其余位按照原码取反加1),然后保证符号位不变,其余位向右移动到X位,在移动的过程中,高位补1.等移 ...

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

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

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

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

  7. 单片机c语言左移的作用,单片机c语言中的左移右移

    // 据说有些编译器采用逻辑右移,即左端补0 结果:a = 0xe3 (11100011) 1当左移移出的是"1"而不是0时,你该怎么想? 2 当左移的操作数是一个sign型是,你 ...

  8. 单片机c语言左移的作用,[转载]单片机c语言中的左移右移

    单片机c语言中的左移右移 左移 变量1 << 变量2 将变量1的二进制位值向左移动由变量2所指定的位数. 例如: a = 0x8f; // 10001111 a << 2; / ...

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

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

最新文章

  1. ASP.NET获取IP的6种方法
  2. Kotlin Gson解析泛型对象
  3. Verilog中case,casex,casez的区别
  4. 骂骂咧咧的 fastreport 数据隔行换色
  5. 多线程生成随机数组+双线程归并排序(C++实现)
  6. 202. Happy Number
  7. Spring Boot——控制台LOGO自定义配置管理解决方案
  8. C++counting sort计数排序(针对string)的实现算法(附完整源码)
  9. Java I/O体系原理
  10. web程序入门五(http无状态)
  11. SQL注入学习part06:(结合sqli-libs学习:51-61关)
  12. Android 上哪个更好:除以 2 还是位移 1?
  13. python自学行吗-没有编程基础,可以自学Python吗?
  14. svn添加提交备注限制和自动发布web项目
  15. Spring AOP(二)之AfterReturning增强处理
  16. springmvc的运行原理个人见解
  17. 数学建模算法与应用 数理统计
  18. 【美赛】美赛字体格式和排版要求
  19. wampserver大红色橘色变成绿色
  20. OpenGL(十三)——Qt OpenGL绘制三维图形

热门文章

  1. Exifinterface图片扩展信息EXIF
  2. 小波怎么选?——看图选
  3. SpringBoot整合knife4j
  4. H5基于canvas实现电子签名并生成PDF文档
  5. ubuntu 22.04安装微信
  6. linux修改网卡频率,Linux 设置网卡速率
  7. SAIO - Swift All In One Diablo版 安装指南 Alpha
  8. 为什么企鹅Tux是Linux的吉祥物?
  9. session中的cookies设置及使用
  10. Ubuntu下查看python安装路径以及pip安装的包列表及路径