(~按位取反)与原码、反码、补码

 #define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int a = 0;                                                      
    int b = ~a;                                                
    //~是按(二进制)位取反的意思,也就是0变成1,1变成0
    // 这里a是一个整型数据,占4个字节,32个比特位
    // 所以这里将a的值用二进制表示出来的话是
    //00000000000000000000000000000000
    //11111111111111111111111111111111
    //负数在内存中储存的时候,储存的是二进制的补码        
    //所以这里按位取反出来的是-1这个数的补码
    // 这里还有一个知识,就是二进制的第一位数是符号位,也就是说假如第一位是1,则为负数,第一位为0,则为正数
    //那么为什么输出结果为-1呢,这是因为使用的printf打印的是这个数的原码   也就是说这里第一次打印出来的-1是原码,也就是10000000000000001
    // 这里涉及了原码  反码  补码的知识
    //原码——》补码的计算规则   符号位不变,原码其他位按位取反得到这个数的反码,反码加一得到补码
    //而补码的过程则为补码减一变成反码,反码在符号位不变,其他位按位取反变成补原码
    // 所以这里的11111111111111111111111111111111是-1的补码,补码减一变成反码
    //           11111111111111111111111111111110  这个是-1的反码  反码的符号位不变  其他数按位取反变成这个数的原码
    //           10000000000000000000000000000001  所以这个是-1的原码,结果位-1,所以说printf打印出来的结果是-1,因为printf打印出来的是这个数的原码
    printf("%d\n", b);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值