C++中int型向无符号类型的转换

110 篇文章 0 订阅
1 篇文章 0 订阅

在日常生活中,我们知道,加上一个负数,等于减去这个负数的绝对值。

那么在C++里,是否和我们平时的认知是一样的呢?

//*******************************************************************************************************

看一段小代码:

int i=-42;
unsigned j=10;
std::cout<<i+j<<std::endl;

这个代码的输出结果是什么呢?


和平时的答案不太一样吧。下面就来探究一下原因。

//*************************************************************************************************************************

因为在机器中,所有的data都是由二进制数来保存,所以此时先将-42转换为二进制数。


这时要注意,int型在机器里是32位存储,所以此时,在101010前面还有25个0,然后第一位是一个1,代表是负数。

所以,此时的-42完全转换为int的二进制形式是:10000000000000000000000000101010.

然后再取反码:除符号位外,其余位取反,即为:11111111111111111111111111010101.

再取补码:在反码的基础上+1,即为:                11111111111111111111111111010110.


好了,处理完int型,现在处理unsigned型。

已知unsigned型为10,则转化为二进制是:

同理,此时前面均为0,所以其二进制就是1010.


现在两个数都处理完了,接下来进行加和。

  11111111111111111111111111010110 + 1010

根据二进制逢二进一,可以得出结果为:   11111111111111111111111111100000

化成十进制,既得到结果。

//*********************************************************************************************************************

由此可知:

1.机器中储存负数是储存其补码,要掌握补码计算过程;

2.int型数化unsigned型数的方法过程;

3.计算机中的基本编译储存原理。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值