转义字符
\转义序列符
\\ 用于表示一个反斜杠,防止它被解释为一个转义序列符
\a 警告字符,蜂鸣
\b 退格符(Tab)
\f 进制符
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\ddd ddd表示1~3ge八进制数字
\xdd dd表示2个十进制数字
int main()
{
// \ddd ddd 代表1~3个八进制数字 如: \311 但是 \985 就不行, 因为八进制里没有8
// \32 会被转义--- 3 2就是2个八进制的数字
// 转义后: 3 2 作为八进制代表的那个十进制数字, 作为ASCII码值对应的字符
// 3 2 转换为十进制--26 ""
printf("%c \n", '\32');
// \xdd dd表示2个十六进制数字
printf("%c \n", '\x66'); // 66 对应的十进制为102对应的ASCII码值是 f
return 0;
}
在这里插入图片描述
字符串
char 字符类型
"字sdsfsada符sfasdf串"
这种由双引号引起来的一串字符称为字符串字面值, 简称字符串
int main()
{
char arr1[] = "abc"; // 使用数组表示字符串 //
// "abc" -- 'a' 'b' 'c' '\0' -- "\0"是字符串的结束标识
char arr2[] = { 'a', 'b', 'c'}; // 这个没有加 \0 就会出现随机
//char arr2[] = { 'a', 'b', 'c' , '\0'};
printf("%s \n", arr1);
printf("%s \n", arr2);
return 0;
}
注意: 字符串的结束标志是一个 \0 的转义字符. 在计算字符串长度的时候 \0 是结束标志, 不算字符串内容
操作符
单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
**~**对一个数的二进制按位取反
-- 前置\后置--
++ 前置\后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
取余/取商%
int main()
{
int a = 5 / 2; // "/" 取商 -- 2
printf("%d \n", a);
int b = 5 % 2; // '%' 取余 -- 1
printf("%d \n", b);
return 0;
}
移位操作符>>,<<
int main()
{
// >> 右移 << 左移 (移的是2进制位)
// 左移-- 吧二进制整体去掉最左边一位, 然后在最右边 补0, 这样实现左移
int c = 1;
// 整形 占4个字节--32个bit位
// 00000000000000000000000000000001
int d = c << 1; // 左移1位 -- 00000000000000000000000000000010 得到 d=2
int e = c << 2; // 左移2位 -- 00000000000000000000000000000100 得到 e=4
// 在进行位移操作时 c 本身不会变, 就是被移位的数本身不会发生变化
printf("c的值: %d \n", c);
printf("d的值: %d \n", d);
printf("e的值: %d \n", e);
printf("c的值: %d \n", c);
return 0;
}
位操作$ | ^
int mian()
{
// & 按 位 与 ---- 对位相同则为真(1), 对位不同为假(0)
// | 按 位 或 ---- 对位之间有一个真(1)则为真(1), 对位都是假(0)则为假(0)
// ^ 按位异或 ---- 对位不同则为真(1), 对位相同为假(0)
int f = 3; // 3的二进制: 011
int h = 5; // 5的二进制: 101
int i = f & h; // 按 位 与: 0→1=0, 1→0=0, 1→1=1 所以 i 的二进制: 001 转换为十进制就是 1
int j = f | h; // 按 位 或: 0→1=1, 1→0=1, 1→1=1 所以 j 的二进制: 111 转换为十进制就是 7
int k = f ^ h; // 按位异或: 0→1=1, 1→0=1, 1→1=0 所以 k 的二进制: 110 转换为十进制就是 6
printf("3和5按位与得(i): %d \n", i);
printf("3和5按位或得(j): %d \n", j);
printf("3和5按位或得(k): %d \n", k);
return 0;
}
逻辑操作符&& ||
int main()
{
// && 逻辑与 并且的意思
// || 逻辑或 或者的意思
int m = 6; // -- 真
int n = 3; // -- 真
int o = 0; // -- 假
int p = m && n; // m 和 n 有两个值都为真(非0),结果就为真(1), 否则为假(0) -- 结果 1
int q = m && o; // m 和 n 有两个值都为真(非0),结果就为真(1), 否则为假(0) -- 结果 0
int r = m || n; // n 和 o 有一个值为真(非0), 结果就为真(1), 否则为假(0) -- 结果 1
int s = m || o; // n 和 o 有一个值为真(非0), 结果就为真(1), 否则为假(0) -- 结果 1
printf("逻辑与 p 的值 %d \n", p);
printf("逻辑与 q 的值 %d \n", q);
printf("逻辑或 r 的值 %d \n", r);
printf("逻辑或 s 的值 %d \n", s);
return 0;
}
条件运算符
int main()
{
// exp1 ? exp2 : exp3
int u = 10;
int v = 20;
int max = (u > v ? u : v); // 如果u > v为真则max的值为u, 否则为v
int min = (u < v ? u : v); // 如果u < v为真则max的值为u, 否则为v
printf("max的值: %d \n", max);
printf("mix的值: %d \n", min);
return 0;
}
"Python里三元运算符"
a=b if b>5 elif 0 // a等于b, 如果b>5结果是a等于b, 否则a等于0
原码反码补码
只要是整数, 内存中存储的都是二进制的补码,
--- 正数的原码,反码,补码相同
原码== 直接按照正负写出的二进制序列
反码 == 原码的符号位变, 其他位取反得到
补码 == 反码+1
-2 的原码反码补码
10000000000000000000000000000010 -- 原码
11111111111111111111111111111101 -- 反码
11111111111111111111111111111110 -- 补码