原码、反码和补码

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

注:使用补码来做运算效率是最高的.

不忘初心,方得始终
 
转自:https://www.cnblogs.com/jialiangliang/p/6044700.html

(转)C语言之原码、反码和补码的更多相关文章

  1. [转]C语言的int最值问题,以及原码反码及补码

    以2字节为例来说: 对于无符号的数值(原码反码及补码都一样),最大值为1111  1111  1111  1111=65535 最小值为0000  0000  0000  0000=0 对于有符号的来 ...

  2. C中进制, 原码, 反码与补码的简单用法

    /** * 二进制 binary 如: 1010 * 八进制 octal 如: 070 * 十六进制 hexadecimal 如: 0x7f * * 1Byte = 8bits * 1WORD = 2 ...

  3. 「C语言」原码反码补码与位运算

    尽管能查到各种文献,亲自归纳出自己的体系还是更能加深对该知识的理解.     本篇文章便是在结合百度百科有关原码.反码.补码和位运算的介绍并深度借鉴了张子秋和Liquor相关文章后整理而出.   目录 ...

  4. java 原码反码及补码 总结

    参考: http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html http://blog.csdn.net/lius ...

  5. C语言学习笔记之原码反码补码

    原码:就是我们自己看的,以及机器输出给我们看的 补码:机器永远是以补码的形式将数据保存在计算机中 正数: 原码=反码=补码 负数: 反码:原码的符号位不变,其他位取反 ,1变0   0变1 补码:机器 ...

  6. 原码 & 反码 & 补码 & 详解

    本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...

  7. Java 原码 反码 补码

    本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希 ...

  8. 位移&二进制转换&原码&反码&补码

    << 左移 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零. 格式 需要移位的数字 << 移位的次数 计算过程 1. 按二进制形式把所有的数字向左 ...

  9. C语言:数的保存 原码 反码 补码

    a=6                                     a=-18 a 的原码就是0000 0000 0000 0110        1000 0000 0001 0010 ...

  10. C语言 原码--反码--补码

    //原码,反码,补码 #include<stdio.h> #include<stdlib.h> //数值的表示方法——原码.反码和补码 //原码:最高位为符号位,其余各位为数值 ...

随机推荐

  1. Erlang 督程 启动和结束子进程

    1.督程: test_sup 2.子进程:test_gen_server 3.子进程规格Spec: { test_gen_server, {test_gen_server, start_link, [ ...

  2. java 开发环境安装

    一.在mac上安装jdk 1. 下载Mac版本的JDK并安装      http://www.oracle.com/technetwork/java/javase/downloads/index.ht ...

  3. java 匿名类和匿名方法

    package com.test; interface product{ int getPrice(); } public class News { /** * @param args */ publ ...

  4. servletResponse 文件下载

    package response; import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOEx ...

  5. 小明同学喜欢体育锻炼,他常常去操场上跑步。跑道是一个圆形,在本题中,我们认为跑道是一个半径为R的圆形,设圆心的坐标原点(0,0)。小明跑步的起点坐标为(R,0),他沿着圆形跑道跑步,而且一直沿着一个方向跑步。回到家后,他查看了自己的计步器,计步器显示他跑步的总路程为L。小明想知道自己结束跑步时的坐标,但是他忘记自己是沿着顺时针方向还是逆时针方向跑的了。他想知道在这两种情况下的答案分别是多少。

    include "stdafx.h" #include<iostream> #include<vector> #include<string> ...

  6. Docker入门系列4:命令行小结

    百度Baidu App Engine(BAE)平台也是以Docker作为其PaaS云基础. 目的就是为了解决以下问题: 1) 环境管理复杂: 从各种OS到各种中间件再到各种App,一款产品能够成功发布 ...

  7. JavaScript之this的工作原理

    JavaScript 有一套完全不同于其它语言的对 this 的处理机制. 在五种不同的情况下 ,this 指向的各不相同. 1.全局范围内 当在全部范围内使用 this,它将会指向全局对象. 2.函 ...

  8. 将參数从PHP传递到JavaScript中

    php: //自己定义数组參数 $newarr = array('a1' => 'a1', 'a2' => 'a2', 'a3' => 'a3'); $config = CJavaS ...

  9. WCP人员管理之添加人员

    1.用户管理页面 其中 : var url_formActionUser = "user/form.do";//增加.修改.查看URL 2. 通过 /form 路由, 转到 Use ...

  10. Matlab时频图

    [b,f,t]=specgram(data,nfft,Fs,window,numoverlap); imagesc(t,f,20*log10(abs(b))), axis xy, colormap(j ...