0
点赞
收藏
分享

微信扫一扫

C语言数据的存储

静鸡鸡的JC 2022-02-19 阅读 79

整数有三种二进制表示形式

原码:本身

反码:符号位不变 其他按位取反

补码:反码+1

(正数原反补相同)

不同的数据类型有不同的范围

比如对八个比特位的字符型变量char就是从-128~127,即0000 0000~1111 1111。

注意:根据二进制数据的增加特点,从0000 0000即0开始逐渐+1,加到0111 1111即127后,会变成1000 0000,取原码后得到-128,然后是1000 0001原码是-127,最后到1111 1111即-1

而unsigned char范围是0~255

注意:因为取值只能到255,所以用unsigned char设置循环条件要注意不能超过255,否则永远达不到回造成死循环

浮点型和整型在内存中的存储方式不一样

float类型32位 double64位也是大同小异的

符号位1个,指数位8个,科学计数位23个。其中指数位要加上127

如对9.0,二进制为1001.0,小数点左移三位 1.001*2^3

则符号位为0,指数位为1000 0001(3+127=130),科学技术位为00100000 00000000 0000000

大小端字节序

对于多字节的数据类型如int,float,在不同的系统环境里字节的排序不太一样,有大端和小端两种

大端字节序就是低字节的数据存储在高地址,小端字节序反之

如对int类型的一个六进制数0x11223344,低地址的字节应该是44,然后依次为33 22 11

若以大端存储,在内存中就会展示为11223344

若以小端存储,在内存中就会展示为44332211

//测试系统的字节序
int main()
{
int n = 1;
char p = (char)n;
if (p == 1)
printf("小端");
else
printf("大端");

return 0;
}

整型提升

计算机计算实在CPU上的ALU(运算器)进行

数据在运算时显示存储在Register(寄存器)中

而ALU在被设计时候就是设计为4个字节为单位进行计算,Register自然也是跟随ALU的规则

所以当有运算进行时候,不满足4个字节的数据(char short)会进行整形提升,规则如下

Ⅰ:无符号的直接补0
Ⅱ:有符号的按符号位补

//char类型的符号位是最高位(第8个二进制位)
//->对char a = 128,(1000 0000)因为最高位为1,所以整型提升会补1

举报

相关推荐

0 条评论