C语言中的按位操作符~介绍

一、在C语言中~的作用是将一个数二进制全部取反(即就是0变1,1变0),如0

首先0的二进制为:000000000000000000000000000000000

反码为:11111111111111111111111111111111

二、我们操作一下

#include<stdio.h>
int main()
{
    int a = 0;
    printf("%d\n", ~a);
    return 0;
}

这个打印的结果为-1

我们来分析一波

首先0的二进制为:00000000000000000000000000000000
0的反码为:11111111111111111111111111111111
补码就是减1:11111111111111111111111111111110

三、为什么结果是-1呢

1.在C中整数在内存中存在的方式是以补码形式存在的

2.一个整数在二进制中的存在形式有三种

①原码

②反码 //就是原码取反

③补码 //反码+1

3.对于一个整数而言,其原码、反码、补码都是同一个数

4.对于负数来说,存在形式也是补码

举例

对于-1来说

原码:10000000000000000000000000000001   //符号位不变 符号位为1就是负数
反码:11111111111111111111111111111110
补码:11111111111111111111111111111111

​在上述代码中为何0按位取反为-1?

不是说负数在内存中是补码吗?0的补码不等于-1的补码啊,这是因为%d是以反码的形式存在,故结果为-1   //%d 打印的是反码 故打印出的结果为-1

猜你喜欢

转载自blog.csdn.net/Leihaifei/article/details/122070775
今日推荐