计算机是如何存储int类型的

声明:本文的内容适用于大部分的C++编译环境,但是可能在部分环境下输出不同。
在阅读文章之前,请务必了解原码,反码和补码的知识。

原码:第一位表示符号,0正1负,其余位表示二进制数值。
反码:正数的反码和原码相同,负数的反码是除符号位以外全部取反。
补码:正数的补码和原码相同,负数的补码是其反码+1。

补码的作用是为了方便处理负数。

printf函数中有一个参数%x,用于输出十六进制。其中,这个十六进制中包含符号位。因此,我们输出下面的代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
  int a=-1;
  printf("%x",a);
}

输出:ffffffff
0xffffffff就是二进制的1111111111111111111111111111111个(32个1),为-1的补码。

我们可以把a带入其他数据计算,研究表明,int按照补码存储。

补充:字节排序

#include<bits/stdc++.h>
using namespace std;
int main(){
  int a=0x12345678;
  char *p=(char*)&a;
  for(int i=0;i<4;i++)printf("%x",p[i]);
}

在我的环境输出78563412。因此,int其实按照四个字节,每个字节逆序排放。
部分环境按照12345678正序排放。这种排放方式就是字节排序。

posted @ 2021-09-25 12:01  计算机知识杂谈  阅读(430)  评论(0编辑  收藏  举报