一.整型在内存中的存储
1.原码、反码、补码
计算机中的整数在内存中有三种表示方法:原码、反码、补码。都以二进制补码形式存在,对于有符号数据类型而言最高位为符号位,其他位为数值位;无符号数据类型全为数值位。
例如:int i=5; 4字节=32位
二进制形式:0 000 0000 0000 0000 0000 0000 0000 0101
符号位 数值位
//符号位:0代表正,1代表负
正数的原码、反码、补码相同;负数则以补码的形式存储。
原码:直接将整数转换成二进制的形式即可。
反码:原码的符号位不变,数值位按位取反。
补码:反码+1。
例如:int i=-1; 负数以补码的形式存在,如何转换呢?如下:
第一步:原码:1000 0000 0000 0000 0000 0000 0000 0001
第二步:反码:1111 1111 1111 1111 1111 1111 1111 1110
第三步:补码:1111 1111 1111 1111 1111 1111 1111 1111
2.大小端存储模式
定义:内存中的字节排序
大端存储模式:数据的低位存在内存的高地址中
小端存储模式:数据的低位存在内存的低地址中
这里内存中的地址从左向右,由上往下依次增高,显示的是16进制数据,i的地址是0x00043FE58 ,那14 00 00 00 是怎么回事呢?
int i =20;
//0000 0000 0000 0000 0000 0000 0001 0100
//00 00 00 14 二进制数据转换成十六进制后低位是14存在了低地址中(小端存储)
大端存储显示:0x00043FE58:00 00 00 14
3.整型提升
先看另一篇https://mp.csdn.net/mp_blog/creation/editor/130477318
思考3.1
#include<stdio.h>
int main()
{
char a = -1;