title: 原码、反码、补码
date: 2019-12-27 20:20:20
tags:
categories: 学习笔记
原码、反码、补码
计算机中存储整数都是以补码的形式存储 (浮点数以 底数+指数得形式存储,所有表示得数字可以很大);
正数的反码补码都是其本身
负数的反码:符号位不变其余取反
负数的补码:符号位不变其余取反+1
如: -7 二进制原码表示为 1000 0111 反码: 1111 1000 补码:1111 1001 十六进制为:f9
补码在进行运算的时候 速度相对于原码、反码更快,所以计算机也补码形式存储
———————————————————华丽分割线——————————————————————
unsigned char num2 = -1;
printf("%u", num2);
printf("%d", num2);
for (char i = 0; i < num2; i++) {
printf("%d\n",i);
}
char 类型占用一个字节,-1在内存中存储为ff(1111 1111) 。标识符unsigned是规定编译器按正数来解析,故在循环中将ff解析为255,但因循环中char类型得i范围为 -128~127故为死循环
printf 只规定内存的解析方式,%u代码以无符号整型解析故为255,%d为有符号整型为-1
为什么char 是 -128~127 范围,int等同理
因为计算机是以补码形式存储数据,-0表示 1000 0001 转换为反码: 1000 0000 在转为原码:1111 1111 第一位表示符号位则为 -128 故负数比正数多一位
补码