c/c++原码反码补码原理 以及进制转换

1首先了解 低字节位 和高字节位 看图

2字节在内存的排列方式

 //int num = 010; //0开头代表 8禁止
 //("%d",num); //所以打印的是8
 int num = 0x12345678;  //将占 2 32位
 printf("%p", &num); 
 /*  要特别 注意 低位 在低字节 高位  高字节
 0x0063FAC0  78  x
 0x0063FAC1  56  V
 0x0063FAC2  34  4
 0x0063FAC3  12  .
 */
 看图2

3 printf  不会进行自动转换
void main()
{
 printf("%d", 10.3);
 printf("\n%f", 10);

getchar();
}

请看图3

4 一定要注意数据会溢出数据会溢出
请看图4

unsigned short num = 65535;
 printf("我有现金:%d元",num);

unsigned short num = 65535+1;
 printf("我有现金:%d元",num);

上面这样数据就会溢出

5 原理

头文件#include<limits.h>
 printf("%d", INT_MAX);
 printf("\n%d", INT_MIN);
 printf("\n%u", UINT_MAX);
 //有负号的情况下 0代表正式 1代表负数
 //1111 1111 1111 1111 1111 1111 1111 1111 
 //0111 1111 1111 1111 1111 1111 1111 1111

6源码反码补码

//1的源码和-1的源码
 //0000 0000 0000 0000 0000 0000 0000 0001
 //1000 0000 0000 0000 0000 0000 0000 0001
//-1符号为是1

源码反码补码过程
//源码1000 0000 0000 0000 0000 0000 0000 0001

//-1反码1 符号位不变  所有0变1  1变0
//111 1111 1111 1111 1111 1111 1111 1110

//-1补码  符号位不变  所有0变1  1变0  在补1(在反码基础是+1)
//111 1111 1111 1111 1111 1111 1111 1111
 unsigned int num = -1;
 printf("%d %u", num, num);


虽然补码后二进制相同 但是他们有负号的符号位不算 所以数据不相同

7为什么要用补码  非常重要!!!

0000 0001  1   (1代表十进制)
1000 0010  2   (1000 0010 是2的源码)

如果我们用2的补码
1000 0010  源码

1111 1101  反码(所有位取反 负号不变)

1111 1110  补码(反码基础 +1)

这时候在相加

0000 0001  1
1111 1110  2的补码
1111 1111  是不是就是-1

-1 源码
1000 0001
1111 1110 反码
1111 1111 补码
用补码的原因就是因为可以大大节约计算机的资源

8 数据的取值范围

时间: 2024-10-10 19:53:41

c/c++原码反码补码原理 以及进制转换的相关文章

原码, 反码, 补码 详解

本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计

[转]原码, 反码, 补码 详解 很全

本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计

关于原码, 反码, 补码的复习

原本大一时考试90+的组成原理,隔了太长时间没使用,概念也慢慢模糊了,由于最近考试的基础知识有可能用到,于是,在网上找些资料,整理成这个文章,方便以后某天回来看看,好记性真不如烂笔头. 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011.如

详解 原码, 反码, 补码

本篇文章讲解了计算机的原码, 反码和补码. 并且深入探求了为何要使用反码和补码, 以及更进一步论证了为何可以用反码和补码的加法计算原码的减法. 论证部分如有错误请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机中用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算机字长为8位

[转载]原码, 反码, 补码 详解

本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计

原码,反码,补码详解及 Java中&gt;&gt;和&gt;&gt;&gt;的区别

前两天分析 HashMap 的 hash 算法的时候,遇见了 >> 和 >>> 这两个符号,当时查了下资料,在脑子中过了一下.今天又碰到了,没想到竟然忘了  0-0........ 我这记忆力哎,不说了.只好做个笔记,提醒自己,遇到啥不会的最好记下来,好记性不如烂博客啊~ 既然涉及到位运算,我们追本索源,就先从最基础的原码,补码和反码学起.搜了一下这方面的资料,发现一篇专门介绍这方面的文章,写的很是透彻,便直接引用过来了,原文地址是:http://www.cnblogs.co

[转] 原码, 反码, 补码 详解

点击阅读原文 作者:张子秋出处:http://www.cnblogs.com/zhangziqiu/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习

原码, 反码, 补码 详解(转)

http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011.如果是 -3 ,就是 10000011 . 那

02进制_原码反码补码

###02.03_Java语言基础(不同进制数据的表现形式)(掌握)* A:二进制的数据表现形式 * 由0,1组成.以0b(b可以大写也可以小写)开头(JDK1.7版本可以表示二进制了)* B:八进制的数据表现形式 * 由0,1,-7组成.以0开头* C:十进制的数据表现形式 * 由0,1,-9组成.整数默认是十进制的 * D:十六进制的数据表现形式 * 由0,1,-9,a,b,c,d,e,f(大小写均可).以0x开头 * E:案例演示 * 输出不同进制表现100的数据. * 0b100 * 0