​​​​​​​【原码】【反码】【补码】 笔记

#include<stdio.h>
#pragma warning (disable:4996)
int main() 
{
    char data = -10;//有符号数二进制存储最高位为符号位,最高位1为负,0为正!!!
    //-10==10001010(原码)==11110101(反码)==11110110(补码)
    printf("%x\n", data);//打印出的结果为f6,所以能看出负数在内存中是按补码存储的!!!
    char data1 = 10;//10==00001010(原码)==00001010(反码)==00001010(补码)
                                //正数的原码反码补码是相同的
        printf("%x\n", data1);//打印结果为a,能看出正数是以原码在内存中存储的
        char data2 = 0xae;//0xae==10101110
        printf("%x\n", data2);//打印结果为ae,0xae=10101110,所以十六进制在内存也是以原码存储
        char data3 = 0256;//0256==10101110
        printf("%x\n", data3);//打印结果为ae,0xae==10101110,所以八进制在内存中也是以原码存储
        char data4 = 129;//超出界限,129==10000001
        printf("%x\n", data4);//打印结果为81,0x81==10000001,超出界限的数据在内存中也是以原码存储
        unsigned char data5 = -10;//以无符号数据类型存储-10,因为-10在内存中以补码存储
        //所以-10==11110110
        printf("%x\n", data5);//打印结果为f6,0xf6==11110110,所以无符号的-10在内存中也是以补码存储
       //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        //计算机在存储数据的时候只在乎数据是正数还是负数,是负数就按补码存储,正数就按原码存储
        //数据类型只是决定数据空间的大小
      //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        char data6 = -10;//-10==11110110(补码)
        printf("%d\n", data6);//打印结果为-10==10001010(原码)
        //所以有符号取:%d %hd %ld,首先看内存的最高位如果为1,是将内存数据符号位不变取反+1得到原码
        printf("%u\n", data6&0x000000ff);//打印结果为246==11110110
        //所以无符号取:将内存数据原样输出
        char data7 = 10;//10=00001010
        printf("%d\n", data7);//打印结果为10==00001010
        //所以有符号取:%d %hd %ld,最高位如果为0 将数据原样输出。

       // !!!!!!!!!!!!!!!!!!!!!!!!!!!!
          //取:%d %hd %ld(有符号取) %u %x %o %lu都是(无符号取)
        //有符号取:%d %hd %ld
        //首先看内存的最高位如果为1 将内存数据符号位不变取反+1到原码
        //最高位如果为0 将数据原样输出。
        //无符号取:将内存数据原样输出
        //!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值