C语言:整数的存储方式

整数的存储方式

char类型在存储时是按照ASCII码值进行存储,存储方式与整型一致
有符号数与无符号数

char一个字节
signed char
unsigned char
int四个字节
signed int
unsigned int

各种类型数据均分为有符号和无符号类型,当定义一个int类型或char类型的数,计算机默认其为有符号类型。

有符号数与无符号数

为了区分正负数
有符号数二进制首位是符号位,0正1负;
无符号数二进制首位是数值位,只用于正数

有符号char类型,十进制数值表示范围是(-128~127);
无符号char类型,十进制数值表示范围是(0~255);

整数以补码形式在内存中存储

有符号数和无符号数均有原码、反码、补码

原码将正负数转化成二进制
反码符号位不变,对剩余二进制位取反
补码反码+1

最后将32位的补码转化为8个十六进制(每4位二进制,转化成1位16进制),32个二进制位转换成为8个十六进位

补码->原码:取反+1

int a=-10;
//1000 0000 0000 0000 0000 0000 0000 1010---原码
//1111 1111 1111 1111 1111 1111 1111 0101---反码
//1111 1111 1111 1111 1111 1111 1111 0110---补码

第一位是符号位,0为正,1为负

//0x FFFFFFF6----十六进制存入内存
  • 将数据转化为十六进制后(十六进制,每两个数代表一个字节);
  • 会将十六进制数按一定规律存入内存(每一块内存也有一个十六进制的编号);
  • 但是,并不一定按照FFFFFFF6的形式存入内存;

为什么需要补码:用于减法计算
计算机计算用补码,人看到的是原码
在这里插入图片描述
ab是有符号,c是无符号

char类型也有有符号数和无符号数

char
0000 00000
0000 00011
0111 1111127
1000 0000-128
1111 1110-2
1111 1111-1
127+1=-1280111 1111+1=1000 0000
-1+1=01111 1111+1=1 0000 0000

char类型只有一个字节八位,只能保存-128~127之间的值,-1+1后,会将1省略变成0。
在这里插入图片描述


版权声明:本文为qq_45481606原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。