|
发表于 2020-1-16 14:52:23
|
显示全部楼层
本帖最后由 jackz007 于 2020-1-16 16:21 编辑
- #include <stdio.h>
- main(void)
- {
- unsigned long long k , s ;
- for(s = 0 , k = 0 ; k < sizeof(long long) * 8 ; k ++) s += (1LL << k) ;
- printf("\t%I64u\n" , s) ;
- }
复制代码
编译、运行实况:
- C:\Bin>cl power.c
- 用于 x86 的 Microsoft (R) C/C++ 优化编译器 19.00.24215.1 版
- 版权所有(C) Microsoft Corporation。保留所有权利。
- power.c
- Microsoft (R) Incremental Linker Version 14.00.24215.1
- Copyright (C) Microsoft Corporation. All rights reserved.
- /out:power.exe
- power.obj
- H:\00.2020\00.00.Exercise\00.C\Power>power
- 18446744073709551615
- C:\Bin>
复制代码
麻烦了半天,其实就是为了计算 64 位整型数的极大值,也就是每个二进制位都被置成 1 的 64 位整型数的值,也就是 0xffffffffffffffff。这个值也可以通过 2 ^ 64 - 1 得到,只不过 2 ^ 64 数值太大,无法通过一个 64 整型数来表达,也就无法通过 2 ^ 64 - 1 来计算这个值。所以,便只好从 1 开始累加了。 |
|