更新时间:2019年07月26日 14时18分45秒 来源:黑马程序员论坛
在使用C++时,需要考虑一个问题,就是数据类型的选择,用short、int、long还是long long,需要注意是否溢出的问题。而由于使用的环境不同,其数据类型大小存在区别。当年刚学C时,为了最简化使用,不去仔细想,投机取巧全部都用了long,现在想起来好逗比。从来没考虑过数据类型大小的本质规定,今天就来学习一下。 C++中提供了很简单的一个函数sizeof()来快速得到数据类型、变量的大小,这样就可以快速找到合适的数据类型了。 int i = 0; cout << "int is " << sizeof(int) << " bits." << endl; cout << "i is " << sizeof(i) << " bits." << endl; cout << "i is " << sizeof i << " bits." << endl; 结果如下: sizeof()获取变量大小有两种方法,但是如果是数据类型比如int,只能使用括号。一般使用习惯都是使用括号形式。 头文件climits(老式实现中为limits.h)中包含了关于数据类型大小的定义。
#define CHAR_BIT 8 /* number of bits in a char */ #define SCHAR_MIN (-128) /* minimum signed char value */ #define SCHAR_MAX 127 /* maximum signed char value */ #define UCHAR_MAX 0xff /* maximum unsigned char value */
#ifndef _CHAR_UNSIGNED #define CHAR_MIN SCHAR_MIN /* mimimum char value */ #define CHAR_MAX SCHAR_MAX /* maximum char value */ #else #define CHAR_MIN 0 #define CHAR_MAX UCHAR_MAX #endif /* _CHAR_UNSIGNED */
#define MB_LEN_MAX 5 /* max. # bytes in multibyte char */ #define SHRT_MIN (-32768) /* minimum (signed) short value */ #define SHRT_MAX 32767 /* maximum (signed) short value */ #define USHRT_MAX 0xffff /* maximum unsigned short value */ #define INT_MIN (-2147483647 - 1) /* minimum (signed) int value */ #define INT_MAX 2147483647 /* maximum (signed) int value */ #define UINT_MAX 0xffffffff /* maximum unsigned int value */ #define LONG_MIN (-2147483647L - 1) /* minimum (signed) long value */ #define LONG_MAX 2147483647L /* maximum (signed) long value */ #define ULONG_MAX 0xffffffffUL /* maximum unsigned long value */ #define LLONG_MAX 9223372036854775807i64 /* maximum signed long long int value */ #define LLONG_MIN (-9223372036854775807i64 - 1) /* minimum signed long long int value */ #define ULLONG_MAX 0xffffffffffffffffui64 /* maximum unsigned long long int value */ 可以看到各数据类型的位数、最大最小值的宏定义。我们可以直接使用这些宏定义来查看数据类型的大小信息。下面是一个很简单的例子:
#include <iostream> #include <climits>
using namespace std;
int main(int argc, char ** argv) { cout << "int is " << sizeof(int) << " bits." << endl; cout << "short is " << sizeof(short) << " bits." << endl; cout << "long is " << sizeof(long) << " bits." << endl; cout << "long long is " << sizeof(long long) << " bits." << endl; cout << "char is " << sizeof(char) << " bits." << endl;
cout << endl << "Maximum and Minimum values: " <<endl; cout << "int: " << INT_MAX << " and " << INT_MIN << endl; cout << "short: " << SHRT_MAX << " and " << SHRT_MIN << endl; cout << "long: " << LONG_MAX << " and " << LONG_MIN <<endl; cout << "long long: " << LLONG_MAX << " and " << LLONG_MIN <<endl; cout << "char: " << CHAR_MAX << " and " << CHAR_MIN <<endl;
system("pause"); return 0; } 通过这些宏定义可以直接查看数据类型的大小信息,再也不用每次都去查大小了。结果如下: |
推荐了解热门学科
java培训 | Python人工智能 | Web前端培训 | PHP培训 |
区块链培训 | 影视制作培训 | C++培训 | 产品经理培训 |
UI设计培训 | 新媒体培训 | 产品经理培训 | Linux运维 |
大数据培训 | 智能机器人软件开发 |
传智播客是一家致力于培养高素质软件开发人才的科技公司,“黑马程序员”是传智播客旗下高端IT教育品牌。自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研3个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,针对性地出版了计算机系列教材50多册,制作教学视频数+套,发表各类技术文章数百篇。
传智播客从未停止思考
传智播客副总裁毕向东在2019IT培训行业变革大会提到,“传智播客意识到企业的用人需求已经从初级程序员升级到中高级程序员,具备多领域、多行业项目经验的人才成为企业用人的首选。”
中级程序员和初级程序员的差别在哪里?
项目经验。毕向东表示,“中级程序员和初级程序员最大的差别在于中级程序员比初级程序员多了三四年的工作经验,从而多出了更多的项目经验。“为此,传智播客研究院引进曾在知名IT企业如阿里、IBM就职的高级技术专家,集中研发面向中高级程序员的课程,用以满足企业用人需求,尽快补全IT行业所需的人才缺口。
何为中高级程序员课程?
传智播客进行了定义。中高级程序员课程,是在当前主流的初级程序员课程的基础上,增加多领域多行业的含金量项目,从技术的广度和深度上进行拓展。“我们希望用5年的时间,打造上百个高含金量的项目,覆盖主流的32个行业。”传智播客课程研发总监于洋表示。
黑马程序员热门视频教程
Python入门教程完整版(懂中文就能学会) | 零起点打开Java世界的大门 |
C++| 匠心之作 从0到1入门学编程 | PHP|零基础入门开发者编程核心技术 |
Web前端入门教程_Web前端html+css+JavaScript | 软件测试入门到精通 |