小白对源码补码的理解

这是我学习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编译的,答案也是正确的。

这就是我说的输出的两种方法,有错误或问题可以私信我哦,么么哒。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值