数据和C
数据类型关键字
| 最初的关键字 |
C90添加 |
C99添加 |
| int |
singed |
_Bool |
| long |
void |
_Complex |
| short |
|
_Imaginary |
| unsinged |
|
|
| char |
|
|
| float |
|
|
| double |
|
|
位:最小的存储单元是位,可以存储0或1
字节是常用的计算机存储单位,一字节为8位
字是设计计算机时给定的自然存储单元,计算机的字长越大,其数据转移越快,允许的内存访问也更多
整数没有小数部分,浮点数有小数部分
浮点数可以表示的范围比整数大
对于一些算术运算(很大的数想减),浮点数损失的精度很多
虽然在任何区间都存在无数个实数,但是计算机的浮点数无法表示区间内的所有值7.0会存储位6.99999
基本数据类型
int
1 2 3
| int a, b = 1
print("%d",b)
|
0x或0X表示十六进制值
0前缀表示八进制
使用不同的进制是为了方便,并不会改变数被存储的方式
1 2 3 4 5 6 7 8 9
| #include <stdio.h> int main(void){ int num = 100; printf("dec = %d; octal = %o; hex = %x\n",num,num,num); printf("dec = %d; octal = %#o; hex = %#x\n",num,num,num); return 0; } dec = 100; octal = 144; hex = 64 dec = 100; octal = 0144; hex = 0x64
|
整数溢出
1 2 3 4 5 6 7 8 9 10 11 12
| #include <stdio.h> int main(void){ int num = 2147483647; unsigned int num2 = 4294967295; printf("%d %d %d\n", num, num+1, num+2); printf("%u %u %u\n", num2, num2+1, num2+2); return 0; } 2147483647 -2147483648 -2147483647 4294967295 0 1 存的是补码
|
打印unsinged int 使用%u
打印long使用%ld %lx %lo
打印short 使用%hd %hx %ho
打印long long 使用%lld %llu
char
转义序列
| 转义序列 |
含义 |
| \a |
警报 |
| \b |
退格 |
| \f |
换页 |
| \n |
换行 |
| \r |
回车 |
| \t |
水平制表符 |
| \v |
垂直制表符 |
| \\ |
反斜杠 |
| \‘ |
单引号 |
| \\“ |
双引号 |
| ? |
问号 |
| \0oo |
八进制(o 0-7) |
| \xhh |
十六进制(h 0-f) |
int类型的常量写法
| 类型 |
十六进制 |
八进制 |
十进制 |
| char |
\x41 |
\101 |
N.A. |
| int |
0x41 |
0101 |
65 |
| unsigned int |
0x41u |
0101u |
65u |
| long |
0x41L |
0101L |
65L |
| unsigned long |
0x41UL |
0101UL |
65UL |
| long long |
0x41LL |
0101LL |
65LL |
| unsigned long long |
0x41ULL |
0101ULL |
65ULL |
可移植类型
stdint.h inttypes.h
1 2 3 4 5 6 7 8
| #include <stdio.h> #include <inttypes.h> int main(void){ int32_t me32; me32 = 45933945; printf("me32 = %d\n", me32); printf("me32 = %"PRId32"\n",me32); }
|
float 、double 、long double
float类型必须至少能表示6位有效数字,且取值范围至少是10^-37^~10^37^
十六进制a.1f p10 指的是2^10^ C99
类型大小
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <stdio.h> int main(void){ printf("int is %zd bytes.\n", sizeof(int)); printf("char is %zd bytes.\n", sizeof(char)); printf("long is %zd bytes.\n", sizeof(long)); printf("long long is %zd bytes.\n", sizeof(long long)); printf("double is %zd bytes.\n", sizeof(double)); printf("long double is %zd bytes.\n", sizeof(long double)); return 0; }
int is 4 bytes. char is 1 bytes. long is 4 bytes. long long is 8 bytes. double is 8 bytes. long double is 16 bytes.
|