(转)C语言之原码、反码和补码
原码、反码和补码
1).数据在内存中存储的时候都是以二进制的形式存储的.
int num = 10;
原码、反码、补码都是二进制.只不过是二进制的不同的表现形式.
数据是以补码的二进制存储的.
2). 1个int类型的变量.在内存中占据4个字节, 32位.
00000000 00000000 00000000 00000000
在不考虑正负的情况下.1个int类型的变量可以表示接近43e种数据.
为了可以表示正负性.使用最高为来表示这个数的正负性.
如果最高为是0 那么表示这个数是1个正数
如果最高为是1 那么表示这个数是1个负数.
所以,来表示数据的只有31位. 所以,1个int类型的变量.
最小值是: -2147483648 最大值是:2147483647
3). 原码
最高位表示符号位. 剩下的位数.是这个数的绝对值的二进制.
10的原码.
00000000 00000000 00000000 00001010
-8的原码.
10000000 00000000 00000000 00001000
绝对值: 正数的绝对值是自己,负数的绝对值去掉负号.
-20.
10000000 00000000 00000000 00010100
4). 反码
正数的反码就是其原码.
负数的反码就是在其原码的基础之上 符号位不变,其他位取反.
10的反码:
10的原码:00000000 00000000 00000000 00001010
10的反码:00000000 00000000 00000000 00001010
-8
-8的原码:10000000 00000000 00000000 00001000
-8的反码:11111111 11111111 11111111 11110111
5). 补码
正数的补码就是其原码.
负数的补码就是在其反码的基础之上+1
10.
10的原码:00000000 00000000 00000000 00001010
10的反码:00000000 00000000 00000000 00001010
10的补码:00000000 00000000 00000000 00001010
-8
-8的原码:10000000 00000000 00000000 00001000
-8的反码:11111111 11111111 11111111 11110111
-8的补码:11111111 11111111 11111111 11111000
6). 任何数据都是以其二进制的补码形式存储在内存中的.
int num = -8;
7). 为什么数据要以补码的形式存储呢?
计算机中只有加法没有减法.为了更加低成本的计算出结果,所以使用补码来存储数据.
3 + 2;
3 - 2; 这个减法运算对于计算机而言它的理解是 3 + (-2); 1
使用原码计算.
3的原码 00000000 00000000 00000000 00000011
-2的原码 10000000 00000000 00000000 00000010
----------------------------------------------------
10000000 00000000 00000000 00000101 结果是1个负数明显是不对的
使用反码计算.
3 的反码: 00000000 00000000 00000000 00000011
-2的反码: 11111111 11111111 11111111 11111101
--------------------------------------------------
00000000 00000000 00000000 00000000 0
使用补码计算
3 的补码: 00000000 00000000 00000000 00000011
-2的补码: 11111111 11111111 11111111 11111110
-------------------------------------------------
00000000 00000000 00000000 00000001 1
注:使用补码来做运算效率是最高的.
(转)C语言之原码、反码和补码的更多相关文章
- [转]C语言的int最值问题,以及原码反码及补码
以2字节为例来说: 对于无符号的数值(原码反码及补码都一样),最大值为1111 1111 1111 1111=65535 最小值为0000 0000 0000 0000=0 对于有符号的来 ...
- C中进制, 原码, 反码与补码的简单用法
/** * 二进制 binary 如: 1010 * 八进制 octal 如: 070 * 十六进制 hexadecimal 如: 0x7f * * 1Byte = 8bits * 1WORD = 2 ...
- 「C语言」原码反码补码与位运算
尽管能查到各种文献,亲自归纳出自己的体系还是更能加深对该知识的理解. 本篇文章便是在结合百度百科有关原码.反码.补码和位运算的介绍并深度借鉴了张子秋和Liquor相关文章后整理而出. 目录 ...
- java 原码反码及补码 总结
参考: http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html http://blog.csdn.net/lius ...
- C语言学习笔记之原码反码补码
原码:就是我们自己看的,以及机器输出给我们看的 补码:机器永远是以补码的形式将数据保存在计算机中 正数: 原码=反码=补码 负数: 反码:原码的符号位不变,其他位取反 ,1变0 0变1 补码:机器 ...
- 原码 & 反码 & 补码 & 详解
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...
- Java 原码 反码 补码
本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...
- 位移&二进制转换&原码&反码&补码
<< 左移 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零. 格式 需要移位的数字 << 移位的次数 计算过程 1. 按二进制形式把所有的数字向左 ...
- C语言:数的保存 原码 反码 补码
a=6 a=-18 a 的原码就是0000 0000 0000 0110 1000 0000 0001 0010 ...
- C语言 原码--反码--补码
//原码,反码,补码 #include<stdio.h> #include<stdlib.h> //数值的表示方法——原码.反码和补码 //原码:最高位为符号位,其余各位为数值 ...
随机推荐
- 将VS2010里的红色波浪线去掉
有时候,程序编译没错,却出现了一堆的红色波浪形,看着就烦. 解决方案:在VAssistX菜单栏->Visual Assist X Options->展开Advanced->Under ...
- Hibernate学习四----------Blob
© 版权声明:本文为博主原创文章,转载请注明出处 实例 1.项目结构 2.pom.xml <project xmlns="http://maven.apache.org/POM/4.0 ...
- java和C#实例化类初始化顺序
c# 初始化顺序 子类的静态字段 子类的静态构造方法 子类的实例字段 父类的静态字段 父类的静态构造方法 父类的实例字段 父类的实例构造方法 java 初始化顺序 初始化过程: 1. 初始化父类中的静 ...
- 对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。 给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
// ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...
- C语言序列点问题总结(大多数高等教育C语言教学课程的漏洞)
C语言序列点总结 2013年11月21于浙大华家池 C 语言副作用: (side effect)是指对数据对象或者文件的修改. 例如,语句 v = 99;的副作用是把 v 的值修改成 99. C语言序 ...
- chessy 提高篇系列 阅读笔记
java提高篇(一)—–理解java的三大特性之封装 封装的好处, 汇聚属性和方法 减少修改对 其他处的影响 控制get和set方法. java提高篇(二)—–理解java的三大特性之继承 继承的好处 ...
- 【BZOJ1115】[POI2009]石子游戏Kam 阶梯博弈
[BZOJ1115][POI2009]石子游戏Kam Description 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要 ...
- 【BZOJ4166】月宫的符卡序列 Manacher+hash
[BZOJ4166]月宫的符卡序列 题解:题倒不难,就是有点恶心. 首先学习回文串的时候一定学到了这样一个结论:一个长度为n的串的本质不同的回文子串数量不超过n个. 那么我们就可以试图将所有回文串的价 ...
- computed 计算属性
wepyjs - 小程序组件化开发框架 https://tencent.github.io/wepy/document.html#/?id=wepy%e9%a1%b9%e7%9b%ae%e7%9a%8 ...
- ideal 快捷键
1.输入sout --> System.out.println(); 2.输入psvm --> main函数; IntelliJ Idea 2017 免费激活方法 1. 到网站 http: ...