%d,%ld,%lld 分别对应 printf 的参数类型 int,long 和 long long。而 pow(2, 31) 的类型是 double,所以 D、F、H 会输出不正确的结果。
如果分别加上对应的转换的话(例如 printf("%lld", (long long)pow(2, 31)))的话,用 cout 和用 printf 输出的结果就应该会一致了。
C语言
是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
c语言%lld输出常负数:printf("%lld/n",a)。d,lx,ld,,lu,这几个都是输出32位的。
hd,hx,hu,这几个都是输出16位数据的。
hhd,hhx,hhu,这几个都是输出8位的。
lld,ll,llu,llx,这几个都是输出64位的。
printf("%llu",.....)
%llu是64位无符号。
%llx才是64位16进制数。
%d有符号32位整数。
%u无符号32位整数。
%lld有符号64位整数。
%llx有符号64位16进制整数。
%#llx带0x的64位16进制格式输出。整型数据可以使用%d(有符号10进制)、%o(无符号8进制)或%x/%X(无符号16进制)方式输入输出。
而格式符%u,表示unsigned,即无符号10进制方式。
单纯的常量默认是整型的
你可以试试定义
long long a = 223
然后
printf("%lld", a)
应该就可以了。
或者
223LL