前言
本文分享了 整型 在内存中的 存储,涉及到原码,反码,补码。
关于原码
整型在内存中储存时,是转化为二进制数字储存的;
原码就是十进制数字直接转化成的二进制数字转化来的;
如:10 -> 1010 -> 00000000000000000000000000001010;
-10 -> -1010 -> 10000000000000000000000000001010;
转化解释
1.整型的大小是 4 个字节,而一个字节是 8 bit ,所以总共有 32 bit 的大小用来储存 整型 ,一个 bit 对应一个二进制位,所以会转化成一个32位的二进制数字;
2.对于有符号整型,32位的首位(最高位)是符号位,0是正数,1是负数;
3.后31位直接对应被转化数字的绝对值;
关于反码
正整数的 原反补 三码相同;
负整数的原码 的符号位不变,其他位按位取反就是 反码。
如: 00000000000000000000000000001010 -> 00000000000000000000000000001010;
10000000000000000000000000001010 -> 11111111111111111111111111110101;
转化解释
1.正整数的三码相同,所以不变;
2.负整数转化时,符号位不变,剩余位,1变0,0变1;
关于补码
正整数的补码与原码相同;
负整数的补码等于反码+1;
如:00000000000000000000000000001010 -> 00000000000000000000000000001010;
11111111111111111111111111110101 -> 11111111111111111111111111110110;
解释
1.在内存中储存的实际是补码;
2.我们在编译器中打开内存时,看到的是补码转化为十六进制的形式;
3.每四位二进制数字转化为一位十六进制数字;
4.十六进制由 1,2,3,4,5,6,7,8,9,a,b,c,d,e,f 组成;
如:11111111111111111111111111110110 -> f f f f f f f 6
5.数字在储存时还会牵扯到 大小端字节序 的知识点(下面有说明);
6.补码直接符号位不变其余位按位取反,然后加一,依旧可以得到原码;
关于为什么要有补码
电脑的 cpu 只有加法计算器,而要实现减法,就引入了补码;
也就是,补码可以将减法转化为加法进行运算;
就像是 5 – 3 -> 5 + ( -3 );
关于大小端字节序
大端字节序存储
将数据的高位字节序内容放在低地址,低位字节序放在高地址;
小端字节序存储
将数据的低位字节序内容放在高地址,高位字节序放在低地址;
例:
假设从左往右是 从低地址到高地址;
小端字节序: -10 (f f f f f f f 6)就会储存为 ff ff ff f6;
大端字节序: -10 (f f f f f f f 6)就会储存为 f6 ff ff ff;
注:每两位十六位进制是一个字节。
写在最后
感谢您看我的文章。
评论前必须登录!
注册