分类: C/C++
2012-04-24 23:53:49
C9X也加入了新的变量类型:
_BoolC9X也允许扩展的整型类型,它们定义在
#define bool _Bool
#define true 1
#define false 0
bool虽然看上去像int,但还是有稍许不同。比如:
bool b = 0.5;
int n = 0.5;
printf ("b: %d, n: %d\n", b, n);
结果为b: 1, n: 0
整型与浮点型类型汇总(linux3.0.0-17-generic x86)
类型 | sizeof | 格式化字符串 | 常量举例 |
char | 1 | %hhd | 123 |
unsigned char | 1 | %hhu | 234U |
short | 2 | %hd | 12345 |
unsigned short | 2 | %hu | 12345U |
int | 4 | %d | 1234567898 |
unsigned int | 4 | %u | 1234567898U |
long | 4 | %ld | 1234567898L |
unsigned long |
4 |
%lu |
1234567898UL |
long long |
8 |
%lld |
12345678987654321LL |
unsigned long long |
8 |
%llu |
12345678987654321ULL |
float |
4 |
%f |
1234.5678F |
double |
8 |
%lf |
123456789.987654 |
long double |
12 |
%Lf |
12345678912345.987654321L |
一些浮点数的操作可能会导致非正常的值,例如:
-1的根号值为NaN。(Not a Number)
1除以0和log(0)的结果都是无穷大。
除了fpclassify,还有另外几个类似的宏:
Ubuntu使用fpclassify时可能会出现错误:
undefined reference to `__fpclassify'
这是一个已知的bug,更新gtk-gnutella包可以解决。当然,你还要确保gcc使用了-lm选项来引入math库。
复数类型:
使用
complex c = 35 + 78i; //与35 + I*78等价
complex a = c * 2;
printf("%f+%fi", creal(c), cimag(c));
printf("%f+%fi", creal(a), cimag(a));
其中creal和cimag分别得到复数的实数和虚数部分。
_Imagianry表示一个虚数,gcc没有支持这个关键字。
类型 | sizeof | 常量举例 |
float complex | 8 | 12.3f+I*45.6f |
double complex | 16 | 1.23+4.56i |
long double complex |
24 |
1.23l+4.56l |
complex等价于double complex。