补码


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 故负数比正数多一位

补码

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动到顶部