机器内部的记录方式

对于无符号数,机器内部所有的二进制编码直接表示这个数字,对于有符号数,机器内部的二进制编码第一位是代表符号,0为正1为负,后面的编码才是真正的数值。

无符号数转有符号数的过程

机器会先判断无符号数的最高位,如果是0,那么就直接转换过去了,不做改动;

如果最高位是1,机器会将无符号数取它的补码当作有符号数。

补码是什么?(原码, 反码, 补码的概念)

原码

就是符号位加数值,相当于有符号数的机器内部编码;

反码

正数的反码就是本身;

负数的反码是 符号位不变,其余各个位取反;

补码

正数的补码就是本身;

负数的补码在反码基础上+1;

例如:

无符号数42486对应的二进制数为:1010010111110110;

在转成有符号数的时候,机器判断第一位不是0,所以取其补码,为1101101000001010;

补码直接当做有符号数的编码,那么第一位代表符号“-”,剩下的是代表数值,转成二进制就是23050;

所以输出的是-23050

#include <iostream>
using namespace std;
int main(){
    int i=42486;
    cout<<"16进制:"<<hex<<i<<endl<<"八进制:"<<oct<<i<<endl ;
    unsigned short int a=42486;
    cout<<"无符号转有符号输出:"<<dec<<short(a) <<endl;
    return 0;
} 

https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/computercode.html[/scode]

最后修改:2020 年 10 月 11 日 10 : 28 PM