long long

本文介绍了C++11中的longlong类型,它通常占用64位,确保能存储大整数。然而,如果不注意类型转换,可能会导致溢出错误。示例展示了在计算2倍INT_MAX时,由于隐式类型转换导致的溢出,从4294967294变为-2。解决方法是在运算时明确指定至少一方为longlong类型,如2LL*INT_MAX,以避免这类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        long long是C++11中新引入的内置类型

        其实并没有什么特别的,根据C++11的文档long long至少占64位,在大部分的编译器里long long占64位。

        在visual studio中各种类型所占字节数如下代码所示,其中显示long long占8字节。同样unsigned long long也占8字节64位。

int main()
{
	cout << sizeof(bool) << endl;		// 1
	cout << sizeof(char) << endl;		// 1
	cout << sizeof(short) << endl;		// 2
	cout << sizeof(int) << endl;		// 4
	cout << sizeof(long) << endl;		// 4
	cout << sizeof(long long) << endl;	// 8
	return 0;
}

        在编程中经常会遇见一个不小心产生的bug

	long long a = 2 * INT_MAX;

        变量a为64位的,可以存下2倍的int类型的最大值,预期结果应该是4294967294,但是实际输出的-2,表示在运算过程中产生了溢出。

        2和INT_MAX都为int类型,进行乘法的时候将结果存在一个int类型的临时变量中,然后将该临时变量赋值给long long类型的a,即将-2赋值给了a。

        在运算时应将其中一个变量定义为long long类型,这样才不会产生溢出。

	long long b = 2LL * INT_MAX;

        这样可以得到正确结果4294967294

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值