转义字符
转义字符:转变了原来的意思。
例如:
打印文件位置:
int main()
{
printf("c:\test\test.c"); //运行结果中没有\t。
printf("c:\\test\\test.c"); //使用\转义。"\\"表示一个反斜杠。
return 0;
}
早期编译器中的三字母词
int main()
{
printf("(are you ok??)");
//在某些编译器中会出现将"??)"转义成"]"的情况。称为三字母词。
return 0;
}
打印单引号
int main()
{
printf("%c\n",'\'');
//打印单个单引号的时候使用\将一对单引号之间的'转义以打印,
//否则会被识别成与两个引号为一对,最后一个落单。双引号同理。
return 0;
}
\ddd和\xdd
int main()
{
printf("%d\n",'\130'); //八进制的130转换成十进制的结果
//结果为88
printf("%c\n",'\130'); //打印ASCII码为八进制130的符号。
//结果为X。
printf("%d\n",'\x30'); //十六进制的30转换成十进制的结果
//结果为48
printf("%c\n",'\x30'); //打印ASCII码为十六进制30的符号。
//结果为0。
return 0;
}
注释
用于解释复杂代码。
/*
int main()
{
printf("%c\n",'\''); //C++注释风格
/*
C语言注释风格。
*/
return 0;
}
*/不支持嵌套注释。
选择语句
int main()
{
int input = 0;
printf("打过恶兆了吗?\n");
printf("过了-->选1,没过-->选2\n");
scanf("%d", &input);
if (input == 1)
print("好耶!过一次九千块!\n");
else
print("加油,大高个打一次1000块。\n");
return 0;
}
调试过程中遇到了中文乱码的问题,遂搜索解决方案:
文件编码格式出了问题,默认编码格式为utf-8,改为中文编码格式(GB2312)后恢复。
修改编码方法
循环语句
int main()
{
int line = 0;
while(line<30000)
{
line++;
printf("写代码%d\n", line);
if (line == 30000)
printf("好offer");
}
return 0;
}
函数
int Add(int x, int y)
{
int z = x+y;
return z;
}
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:>");
scanf("%d %d", &num1, &num2);
sum = Add(num1, num2);
printf("sum = %d\n", sum);
return 0;
}
操作符
算术操作符
若操作符两端均为整数,那么不论结果变量定义为int型还是float型,均只输出整数部分。
+ 加
- 减
* 乘
/ 除
% 取余(取模)
移位操作符
移位操作符移动的是二进制位
>> 右移操作符
<< 左移操作符
位操作符
& 按位与
| 按位或
^ 按位异或
赋值操作符
=
+= : a = a + 5; --> a +=5;
-=
*=
/=
&=
^=
|=
>>=
<<=
单目操作符
只有一个操作数的操作符。
! : 逻辑反操作
int main()
{
int a = 10;
printf("%d\n", !a);
//因为a的值不等于0,故a为真(非0),!a为假(0),打印结果为0;
return 0;
}
用法:
int main()
{
if(a)
{
//如果a为真,执行
}
if(!a)
{
//如果a为假,执行
}
return 0;
}
- : 负值
+ : 正值
& : 取地址
sizeof : 计算操作数的类型长度(以字节为单位)
sizeof是操作符,所以sizeof()括号可以省略(一般不省略)
用sizeof计算数组元素个数
int sz = sizeof(arr) / sizeof(arr[0]); //用数组的总大小除以数组第一个元素的大小即为数组元素个数。
~ : 对一个数的二进制按位取反
不考虑符号位不变。
原码、反码、补码相关基础知识
- 整型变量占4字节,32比特,故二进制数应为32位。
- 对正整数:原码、反码、补码相同。
- 对负数:第一位符号位(1为负),剩下31位表示数。
原码:直接用二进制表示数。例11使用8位二进制表示应为:00001011,-11为:10001011。
反码:原码除符号位外,按位取反。
补码:反码二进制序列+1。 - 整型变量在内存中存储的是补码。
将0按位取反
0:
原码:
00000000 00000000 00000000 00000000
反码:
11111111 11111111 11111111 11111111
补码:
00000000 00000000 00000000 00000000
-1:
原码:
10000000 00000000 00000000 00000001
反码:
11111111 11111111 11111111 11111110
补码:
11111111 11111111 11111111 11111111
++ : 前置、后置++;- - : 前置、后置- -
int main()
{
int a = 10;
int b = 10;
int c = ++a; //先++,再赋给c
int d = b++; //先赋给d,再++
printf("%d\n", a); //输出11
printf("%d\n", b); //输出11
printf("%d\n", c); //输出11
printf("%d\n", d); //输出10
return 0;
}
* : 间接访问操作符(解引用操作符)
(类型) : 强制类型转换
int main()
{
int a = (int)3.14; //括号中放希望强制转换的类型,一般不推荐使用
printf("%d\n", a); //输出11
return 0;
}