原码、反码、补码
原码:
最高位为符号位,其余各位为数值本身的绝对值
反码:
正数:反码与原码相同
负数:符号位为1,其余位对原码取反
补码:
正数:原码、反码、补码相同
负数:最高位为1,其余位为原码取反,再对整个数加1
原码例子:
对应十六进制:0000 0000 0000 0001
对应十六进制:0000 0000 0000 0010
补码例子:
这里会发现-1显示为ffffffff,由于int是32位
我们推理一下
-1的原码
1000 0000 0000 0000 0000 0000 0000 0001
取反
1111 1111 1111 1111 1111 1111 1111 1110
负数 1
1111 1111 1111 1111 1111 1111 1111 1111,这个就是-1的补码
原码 | 反码 | 补码 | |
7 | 0000 0111 | 0000 0111 | 0000 0111 |
-7 | 1000 0111 | 1111 1000 | 1111 1001 |
从这里能发现,计算是用补码存储的
例子:
从这里能发现,计算是用补码存储的
例子:
#include<stdio.h>
void main() {
int x = -7;
printf("%p", &x);
getchar();
}