C | C语言学习(二)

1.打印占位符:

占位符 说明
%d 输出一个有符号的10进制int型(signed int)
%f 输出一个float型(默认保留六位小数)(float)
%.2f 输出一个float型,保留两位小数
(C语言中存在四舍五入,C++不存在)
%lf 输出一个double型(double)
%u 输出一个无符号的10进制int型(unsigned int)
%hd 输出一个short int型
%ld 输出一个long int型
%ud 输出一个long long int型
%c 输出一个char型 
%s 输出字符串,遇到\0停止(char *)
%p 输出16进制形式的内存地址
%e 以科学计数法形式输出
%o(字母o) 输出无符号8进制的int类型(unsigned int)
%x(%X) 输出16进制的int类型,字母以小写输出(字母以大写输出)(unsigned int)
%hu 输出unsigned short类型
%lu 输出 unsigned long类型
%llu 输出 unsigned long long类型

printf 附加格式:

字符 含义 举例
- 左对齐

int a=10 ;
printf("%-5d\n",a);

//输出结果:10___

m(m是一个整数) 数据最小宽度

int a=10 ;
printf("%5d\n",a);

//输出结果:___10

0(数字0) 与m搭配使用,不可和-搭配使用,将输出的数前面加上0,直到数据宽度为m

int a=10 ;
printf("%05d\n",a);

//输出结果:00010

m.n(m与n都是一个整数)

m指域宽,即对应的输出项在输出设备上所占的字符数。

n 指精度,用于说明输出的实型数的小数位数。

对数值型的来说,未指定 n 时,隐含的精度为 n = 6 位。

float b = 3.1415f;
printf("%4.2f\n", b);

//输出结果:3.14

2.定义常量的两种方式:

 a.#define 名称 值
 b.const 数据类型 名称=值;

 注意:方法a结尾没有分号;方法b在C语言中不安全。

#define PI 3.14
const float PI = 3.14;

3.VS中直接使用scanf()等函数会提示不安全,运行下方代码,会报错: C4996    'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.  
解决办法(三种)
a.代码中添加#define _CRT_SECURE_NO_WARNINGS(这个宏定义最好放到c文件的第一行)
b.代码中添加 #pragma warning(disable:4996)
c.采用带_s的函数,如scanf_s,但这并不是标准的C函数。

	printf("请输入一个整数:");
	int a = 0;
	scanf("%d",&a);
	printf("%d\n",a);

4.进制变换:

进制变换 方法 举例
十进制->二进制 除二反序取余法

123(十进制):

123/2=61……1

61/2=30……1

30/2=15……0

15/2=7……1

7/2=3……1

3/2=1……1

1/2=0……1

1111011(二进制)

拆分为2的指数

123(十进制):123=64+32+16+8+2+1=2^6+2^5+2^4+2^3+2^1+2^0=1111011(二进制)

十进制->八进制 除八反序取余法

123(十进制):

123/8=15……3

15/8=1……7

1/8=0……1

173(八进制)

十进制->十六进制 除16反序取余法

123/16=7……11

7/16=0……7

7B(十六进制)

二进制->十进制 权值法 1111011(二进制):
1*2^0+1*2^1+0*2^2+1*2^3+1*2^4+1*2^5+1*2^6=123(十进制)
8421法则

……64 32 16 8 4 2 1

       1    1   1 1 0 1 1(二进制)

64+32+16+8+2+1=123(十进制)

二进制->八进制 从右向左每3个一组转为八进制

1  111  011(二进制)

1    7      3(八进制)

二进制->十六进制 从右向左每4个一组转为八进制

111  1011(二进制)

7       B(十六进制)

八进制->十进制 权值法 173(八进制):3*8^0+7*8^1+1*8^2=3+56+64=123(十进制)
八进制->二进制 每一位转为3位的二进制

1      7      3(八进制)

001 111 011(二进制)

十六进制->十进制 权值法

7B(十六进制)

11*16^0+7*16^1=11+112=123(十进制)

十六进制->二进制 每一位转为4位的二进制

7       B(十六进制)

0111 1011(二进制)

小数十进制->二进制 小数位乘二正向取整法

0.456(十进制)

0.456*2=0.912……0

0.912*2=1.824……1

0.824*2=1.648……1

0.011(二进制)

5.数据类型的作用:编译器预算对象(变量)分配的内存空间大小。

6.在定义数据时,可以直接定义十进制、八进制(以0开头)、十六进制(以0x开头),但不可以直接定义二进制。

7.sizeof:
 a. sizeof不是函数,所以不需要包含任何头文件,它的功能是计算一个数据类型的大小,单位为字节。
 b. sizeof的返回值为 size _ t。
 c. size _ t 类型在 32 位操作系统下是 unsigned int,是一个无符号的整数。
 d. 使用:sizeof(数据类型)或者sizeof(变量名)。

8.浮点型float、double:不以 f 结尾的常量是 double 类型,以 f 结尾的常量 ( 如 3 . 14f ) 是 float 类型。

9.原码、反码、补码:
 原码:最高位做为符号位 , 0 表示正 , 为 1 表示负;
 反码:对于正数 , 反码与原码相同;对于负数 , 符号位不变 , 其它部分取反;
 补码:对于正数 , 原码、反码、补码相同;对于负数 , 其补码为它的反码加 1。
 补码推原码:符号位不动,其他位取反,最后整个数加1,得到原码。

10.在计算机系统中,数值一律用补码来存储,主要原因是:
 a.统一了零的编码;
 b.将符号位和其它位统一处理;
 c.将减法运算转变为加法运算;
 d.两个用补码表示的数相加时,如果最高位 ( 符号位 ) 有进位,则进位被舍弃。

 

你可能感兴趣的:(C语言,c语言)