微软VC编译器对signed类型超出取值范围的处理

本文探讨了C++Primer中提到的类型决定对象取值范围的问题,着重分析了VC编译器对signed类型超范围赋值的处理方式。当signed类型变量被赋予超出范围的值时,VC编译器采取类似于unsigned类型的方法,通过求模运算确保值在范围内,例如,379997532212会被转换为2040410164。这种处理方法实际上是从低位向高位赋值,超出部分被舍弃。
摘要由CSDN通过智能技术生成

今天在读C++Primer时有这么一句话:对象的类型决定对象的取值。这会引起一个疑问:当我们试着把一个超出其取值范围的值赋给一个指定类型的对象时,结果会怎样呢?答案取决于这种类型是signed还是unsigned。

对于unsigned类型来说,编译器将会对unsigned类型求模,直到满足范围为止;对于signed类型来说,由编译器决定实际赋予的值,在实践操作中,很多编译器处理signed类型与unsigned类型类似。

      那么对于我们常用的C/C++编译器 VC;编译器是如何处理signed类型的呢?

      对于常见的整型int(是一种signed类型)有如下例子:

#include<iostream>
using namespace std;
int main(){
	int n=379997532212;
	cout<<n;
}


int类型在VC中由4个字节表示,因此取值范围为-2147483648-2147483647

显然379997532212已经超出范围了&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值