整理C/C++中的64位整型

本篇文章转载自:VC驿站:http://www.cctry.com/thread-277221-1-1.html

最近给大家录制讲解C++基础方面的教程,刚讲到数据类型这块。地址如下:http://www.cctry.com/thread-277142-1-1.html


关于基本类型中的整型,默认的一些 short、int、long 等大家都比较熟悉。int、long 占用 4 个字节32位,最大能表示的无符号正整数也才是 4294967295,也就是 42亿多。现如今社会中各种各样的数量需要整型来表示,但数目已远远超过 4294967295,比如当今的世界人口,等等。比如开发过程中经常要用到的毫秒级时间戳,即代表从1970年到现在为止经过的毫秒数。这些数值都超过了 4294967295,普通的 int 和 long 已经无法表示的下了,所以又出现占用 8个字节的64位整型:long long、_int64、__int64,其无符号能表示的最大正整数是:18446744073709551615,已经非常大了。。。可为什么有三种?下面给大家说下!

C99标准以前:
64位整型是一种没有明确规范的数据类型,各种主流的编译器对64位整型的支持也是标准不一,形态各异。于是便出了 long long、_int64、__int64 这么几种;

C99标准推出:
C99将 long long 纳入到 C++标准中,并规定 long long 类型的位数不低于64位;
Linux上GCC从4.5版本开始,完全支持C99标准,因此可以使用 long long 表示64位整数;
Windows 下 VC6.0 是1998年推出的,所以不支持C99标准,但是Windows为了支持64位整型,自己提供了__int64 类型来表示64位整数,VC6.0中还可以使用少一个下划线的版本 _int64

C++11标准推出:
long long 进入了 C++11 标准,同样定义为位数不低于64位;
GCC4.8开始支持 C++11,将 long long 型定义为64位,Visual Studio 2013 开始支持 C++11,同样将 long long 定义为64位。

备注:不过微软为了支持以前的程序代码,所以在 VC6.0 以及以后的编译器中都支持 _int64 及 __int64 类型。

好了,8个字节64位的整型我们搞清楚了之后,那么在进行打印输出或者格式化字符串的时候,用 % 什么呢?普通的 %d 肯定是不行了,应该用什么呢?

long long => %lld
unsigned long long => %llu
__int64 => %I64d

unsigned __int64 => %I64u

OK了,基本就给大家讲完了。为了通用性和移植性,建议大家还是使用 long long 类型吧,不过如果大家手头还是古董级别的 VC6.0 或者 低于支持 C++11 标准版本的编译器:VS2002、VS2003、VS2005、VS2008、VS2010、VS2012,那么只能使用 __int64 了。

有的网友会说了,long long 太长了,unsigned long long 更长,还是不如 __int64 方便!其他网友要说了,你直接 typedef 一下不就得了就可以使用短名字了:
typedef signed long long                TSint64;

typedef unsigned long long                TUint64;

这样定义完之后可以直接使用 TSint64 和 TUint64 了。

以上!

本篇文章转载自:VC驿站:http://www.cctry.com/thread-277221-1-1.html

### 选择题 #### 题目1 **题目**: 下列选项中哪一个表达式的运行结果是9? **选项**: A. `cout << "5+ 4" << endl;` B. `cout << 5 << "+" << 4 << endl;` C. `cout << 5 + 4 << endl;` D. `cin >> 5 + 4 >> endl;` **答案**: C **解析**: `cout << 5 + 4 << endl;` 表达式会先执行加法操作,然后输出结果9。 #### 题目2 **题目**: 要求程序输出“Hello, World!”,下列哪条语句是正确的? **选项**: A. `cout << "Hello, World!";` B. `cout "Hello, World!";` C. `cout << Hello, World!;` D. `cout >> "Hello, World!";` **答案**: A **解析**: 正确的输出语句应该是 `cout << "Hello, World!";`,使用双引号包裹字符串并用 `<<` 操作符进行输出。 #### 题目3 **题目**: 在C++中,表示布尔数据类型的关键词是什么? **选项**: A. `int` B. `bool` C. `double` D. `string` **答案**: B **解析**: `bool` 是C++中的关键字,用来表示布尔数据类型,取值只有true和false两种。 #### 题目4 **题目**: 完全数是指一个数恰好等于除它本身外的所有因数之和。以下哪项代码能够正确地找到并输出1至10000间第n个完全数? **选项**: A. `sum += i; sum == a; continue;` B. `sum += j; sum == a; break;` C. `sum += j; sum == a; continue;` D. `sum += i; sum == a; break;` **答案**: B **解析**: 应该累加因数(j)而不是数(i), 并且在找到第n个完全数后应该跳出循环,因此选择B. #### 题目5 **题目**: 给定如下程序片段,当输入为11时,输出是多少? ```cpp int x; cin >> x; cout << x + 2; ``` **选项**: A. 10 B. 11 C. x D. 13 **答案**: D **解析**: 输入11,程序输出11加上2的结果,即13。 #### 题目6 **题目**: 关于质数判断的代码,以下哪一项是正确的? **选项**: A. `bool isprime = true; n % i == 0` B. `bool isprime = false; n % i != 0` C. `bool isprime = true; n % i != 0` D. `bool isprime = false; n % i == 0` **答案**: A **解析**: 初始假定为素数(`isprime=true`),一旦发现因子则设为非素数(`isprime=false`)并跳出循环。 #### 题目7 **题目**: 当执行完以下代码块后,屏幕上的输出结果是什么? ```cpp int a = 5; int b = a + 3; int c = b - 2; cout << c; ``` **选项**: A. 6 B. 8 C. 5 D. 10 **答案**: A **解析**: 变量a赋值为5,b等于8(c=a+3),最后c变为6(b-2). #### 题目8 **题目**: 如何正确定义一个存储浮点数值的变量? **选项**: A. `int` B. `double` C. `char` D. `long long` **答案**: B **解析**: 浮点型数据应使用 `float` 或 `double` 类型来保存,默认情况下 `double` 更常用。 #### 题目9 **题目**: 如果需要检查两个条件之一满足即可触发特定动作,比如城市A和城市B其中一个温度低于零度但另一个不低于零度的情况下输出1,请问以下哪种组合最符合要求? **选项**: A. `a < 0 && b >= 0` B. `a > 0 || b <= 0` C. `a >= 0 && b >= 0` D. `a < 0 && b < 0` **答案**: A **解析**: 条件应该是`a < 0 && b >= 0`或相反情况下的分支逻辑,故选A。 #### 题目10 **题目**: 对于如下的代码段,在满足什么条件下才会输出1? ```cpp if(_①_) { if(_②_) { cout << 1; return 0; } } ``` **选项**: A. `_①_: a < 0, _②_: b >= 0` B. `_①_: a > 0, _②_: b <= 0` C. `_①_: a >= 0, _②_: b >= 0` D. `_①_: a < 0, _②_: b < 0` **答案**: A **解析**: 根据题意,只有在一个城市温度小于0,另一个城市温度不小于0时才输出1。 ... (重复上述格式直到完成全部40道选择题) --- ### 判断题 #### 题目1 **题目**: 整形 `int` 数据类型不能储存小数。 **答案**: 正确 **解析**: `int` 类型只能存储整数值,不能直接存储带有小数部分的数据。 #### 题目2 **题目**: 在C++中,`&&` 和 `||` 分别表示逻辑与和逻辑或运算。 **答案**: 正确 **解析**: 这是对C++语言基本逻辑运算符的理解,`&&` 代表逻辑与,`||` 代表逻辑或。 #### 题目3 **题目**: 如果没有明确初始化,那么变量的初始值将是不确定的。 **答案**: 正确 **解析**: 在大多数编程环境中,未初始化的局部变量含有垃圾值,这意味着它的值是随机不可预测的。 #### 题目4 **题目**: `cout` 用于输出,而 `cin` 用于输入。 **答案**: 错误 **解析**: 实际上正好相反,`cout` 用于输出,`cin` 用于输入。 #### 题目5 **题目**: `break` 语句可以用来立刻终止当前所在的循环结构。 **答案**: 正确 **解析**: 使用 `break` 可以使程序提前结束最近的一层循环体。 ... (继续列出剩余的5道判断题) --- 以上是从提供的文档中抽取相关知识点整理而成的选择题和判断题,以及相应的解析说明。希望这些题目可以帮助您更好地理解和掌握C++的基础概念及应用技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值