C语言学习2

 
转义字符
\转义序列符

\\ 用于表示一个反斜杠,防止它被解释为一个转义序列符
\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  -- 补码
 

 

posted @ 2021-07-06 12:39  答案之星  阅读(225)  评论(0)    收藏  举报