Cpp笔记_关于补码的一点回顾

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define PAGES 336    //二进制原码表示为 0000 0001,0101 0100,至少可以使用2B的存储,系统一般使用补码进行数据间处理
#define WORDS 65618  //二进制原码表示为 0001,0000 0000,0101 0010

int main(void)
{
    short num = PAGES;
    short mnum = -PAGES;

    //%hd 为 short int,%hu 为 unsigned short int
    printf("num as short and unsigned short: %hd %hu\n", num,num);//输出结果为336 336
    printf("-num as short and unsigned short: %hd %hu\n", mnum,mnum);//输出结果为-336 65200
    //这里unsigned输出的并非期望的-336,主要是由于系统默认采用二进制补码表示有符号整数
    // 由于使用补码,则0-32767(0000 0000 0000 0000-0111 1111 1111 1111)表示其自身,
    // 而32768-65535(1000 0000 0000 0000-1111 1111 1111 1111,补码)表示负数(真值为-336 - -1)
    // -336原码表示为1000 0001 0101 0000  1111 1110 1010  补码表示:1111 1110 0110 0000 = 65120
    // 这里打印为65120的原因 是输出格式限制为unsigned int
    //这里需要额外注意到的是负数补码与原码之间的转化:原码->补码:符号位不变,其余位全部取反,末位+1
    printf("num as int and char: %d %c\n", num, num);//同样的,这里第二个输出结果为P原因为打印格式限制为char类型
    printf("WORDS as int,short,and char:%d %hd %c\n", WORDS, WORDS, WORDS);

    getchar();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值