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

发布时间:2020-07-11 11:25:45 作者:超级极客
来源:网络 阅读:2089

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

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

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

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


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

 getchar();
}

请看图3

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


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

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


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

上面这样数据就会溢出

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


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

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


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);

c/c++原码反码补码原理 以及进制转换
虽然补码后二进制相同 但是他们有负号的符号位不算 所以数据不相同


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 数据的取值范围

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





























推荐阅读:
  1. C#二进制流的序列化和反序列化操作
  2. C# 二进制掩码

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

二进制 include c/c++

上一篇:使用linux的sfdisk命令硬盘分区工具

下一篇:怎么用HTML frame标签

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》