在C语言中,整数是按照二进制存储的。
一个整型是4个字节,一个字节是8个比特位,4*8=32。
比如-3这个数字,在内存中就是10000000000000000000000000000011
关于原码、反码、补码
系统在内存中存放数据的时候,会先把二进制源码转化为反码,在把反码转换为补码,最后存放到内存中。
原码
什么是原码?像我们前面的-3,直接转化成二进制就是原码了。
反码
怎么得出反码呢?其实就是由原码的符号位不变,其他位按位取反得到的,那么-3的反码就是
11111111111111111111111111111100
符号位就是二进制从左开始的第一位,如果是正数就是0,如果是负数就是1,比如3的源码是
00000000000000000000000000000011
补码
补码就是在反码的基础上给二进制位加上个1,那么就得到了
11111111111111111111111111111101
我们还要知道一件事情,那就是正数的原码、补码、反码是一样的,这就是为什么我们前面要用-3来举栗子
当要用到-3的时候,系统就会将-3的补码转换成反码(减1),再将反码转换成原码(符号位不变,其他位按位取反),就得到了原来的数字。