这是我学习c语言的第三天,以下是我对源码补码的理解。
计算机为了方便计算采用了码制。其中有源码,反码,补码。
源码是数的二进制位,反码是其源码的二进制取反,补码是反码的二进制加一。
当运算的时候,计算机是以补码的形式存储并运算的,在我的理解下,是以源码的方式输出,当然%u不是。
-7的%d和%u输出不一样,哪里不一样呢,%d输出的是源码,定义-7为int型,那么源码反码补码如下
因为%d输出的是有符号类型,所以说还是刚开始那个源码,就是-7, 而%u不一样,因为是 无符号类型所以第一位就是数值,源码就是以补码的形式输出就是4294967289。
算的和计算机一致。
再举个char型的 -7,用上面这张图那么%d输出的是-7,%u输出的还是补码,不过%u是unsigned int型32bit而char只是8bit,那现在就应该将补码前面全部补1,就是1111 1111 1111 1111 1111 1111 1111 1001,换算成十进制就是4294967289。
也一致。
当然也可以用钟表的形式,
以char 类型的-7为例,%hhd是有符号类型取值范围就是-128到127,%hhu就是0到255如上图一样-7要是%hhd的话,就在取值范围内,所以就是-7,%hhu的话不在范围内就可以将其看成钟表的步数,-7就是逆时针走七步就是255-6=249
vscode编译器有问题就用了Linux编译的,答案也是正确的。
这就是我说的输出的两种方法,有错误或问题可以私信我哦,么么哒。