本章重点1. 数据类型详细介绍2. 整形在内存中的存储:原码、反码、补码3. 大小端字节序介绍及判断4. 浮点型在内存中的存储解析
目录
char // 字符数据类型short // 短整型int // 整形long // 长整型long long // 更长的整形float // 单精度浮点数double // 双精度浮点数//C 语言有没有字符串类型?
charunsigned charsigned charshortunsigned short [ int ]signed short [ int ]intunsigned intsigned intlongunsigned long [ int ]signed long [ int ]
floatdouble
> 数组类型> 结构体类型 struct> 枚举类型 enum> 联合类型 union
int * pi ;char * pc ;float* pf ;void* pv ;
void 表示空类型(无类型)通常应用于函数的返回类型、函数的参数、指针类型。
int a = 20 ;int b = - 10 ;
原码直接将二进制按照正负数的形式翻译成二进制就可以。反码将原码的符号位不变,其他位依次按位取反就可以得到了。补码反码 +1 就得到补码。
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理( CPU 只有加法器 )此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
- //代码1
- #include
- int check_sys()
- {
- int i = 1;
- return (*(char *)&i);
- }
- int main()
- {
- int ret = check_sys();
- if(ret == 1)
- {
- printf("小端\n");
- }
- else
- {
- printf("大端\n");
- }
- return 0;
- }
- //代码2
- int check_sys()
- {
- union
- {
- int i;
- char c;
- }un;
- un.i = 1;
- return un.c;
- }
- 1.
- //输出什么?
- #include
- int main()
- {
- char a= -1;
- signed char b=-1;
- unsigned char c=-1;
- printf("a=%d,b=%d,c=%d",a,b,c);
- return 0;
- }
- 2.
- #include
- int main()
- {
- char a = -128;
- printf("%u\n",a);
- return 0;
- }
- 3.
- #include
- int main()
- {
- char a = 128;
- printf("%u\n",a);
- return 0;
- }
- 4.
- int i= -20;
- unsigned int j = 10;
- printf("%d\n", i+j);
- //按照补码的形式进行运算,最后格式化成为有符号整数
- 5.
- unsigned int i;
- for(i = 9; i >= 0; i--)
- {
- printf("%u\n",i);
- }
- 6.
- int main()
- {
- char a[1000];
- int i;
- for(i=0; i<1000; i++)
- {
- a[i] = -1-i;
- }
- printf("%d",strlen(a));
- return 0;
- }
- 7.
- #include
- unsigned char i = 0;
- int main()
- {
- for(i = 0;i<=255;i++)
- {
- printf("hello world\n");
- }
- return 0;
- }
3.141591E10浮点数家族包括: float 、 double 、 long double 类型。浮点数表示的范围: float.h 中定义
- int main()
- {
- int n = 9;
- float *pFloat = (float *)&n;
- printf("n的值为:%d\n",n);
- printf("*pFloat的值为:%f\n",*pFloat);
- *pFloat = 9.0;
- printf("num的值为:%d\n",n);
- printf("*pFloat的值为:%f\n",*pFloat);
- return 0;
- }
输出的结果是什么呢?

(-1)^S * M * 2^E(-1)^s 表示符号位,当 s=0 , V 为正数;当 s=1 , V 为负数。M 表示有效数字,大于等于 1 ,小于 2 。2^E 表示指数位。
0 01111110 00000000000000000000000
9 -> 0000 0000 0000 0000 0000 0000 0000 1001
V=( - 1)^0 × 0.00000000000000000001001×2^( - 126)=1.001×2^( - 146)
9.0 -> 1001.0 -> ( - 1 ) ^01 . 0012 ^3 -> s = 0 , M = 1.001 , E = 3 + 127 = 130
0 10000010 001 0000 0000 0000 0000 0000