目录
原码,反码,补码
计算机中的字符有三种表示方法,即原码,反码,补码。
三种表示方法均有符号位和数值位两部分,符号位用'0'表示正,用'1'表示负,而符号位三种表示方法各不相同。
正数的原码,反码,补码
原码
将数字将十进制按照正负数形式翻译成二进制就可以。
反码
原码的符号位保持不变,其他位依次按位取反。
补码
反码加1
整型数字在内存中的存储
为什么15和-15在内存中是这样子的呢?
下面进行讲解
数字在内存中是以补码的形式存储的,
#include<stdio.h> int main() { int a = 15; 原码:0000 0000 0000 0000 0000 0000 0000 1111 反码:0000 0000 0000 0000 0000 0000 0000 1111 补码:0000 0000 0000 0000 0000 0000 0000 1111 转化为十六进制: // // 0x 00 00 00 00 0f }
int main() { int a = -15; //原码:1000 0000 0000 0000 0000 0000 0000 1111 //反码:1111 1111 1111 1111 1111 1111 1111 0000 //补码:1111 1111 1111 1111 1111 1111 1111 0001 //转化为十六进制: //0x ff ff ff ff f1 }
从上我们可以看出数字是怎样在内存中存储的,但我们会发现放进内存中的位置是反的。
这就和大端小端存储模式有关。
大端小端
大端存储模式,是指数据的低位会保存在内存的高地址中,而数据的高位保存在内存的低地址中。
小端存储模式,是指数据的低位会保存在内存的低地址中,而数据的高位保存在内存的高地址中