Week1

周一笔记

printf函数

printf函数的格式

%d          有符号10进制整型
%i          有符号10进制整型
%u          无符号10进制整型
%o          无符号8进制整型
%x(%X)      无符号16进制整型
%f          单、双精度浮点数(默认保留6位小数)
%e(%E)      以指数形式输出单、双精度浮点数
%g(%G)      以最短输出宽度,输出单、双精度浮点数
%c          字符
%s          字符串
%p          地址

scanf函数

// 利用fflush方法清空缓冲区(不是所有平台都能使用)
fflush(stdin);
// 利用setbuf方法清空缓冲区(所有平台有效)
setbuf(stdin, NULL);

类型转换

C语言当中,大类型转换成小类型会丢失精度,直接去尾

if语句

在企业开发当中,如果用if与常量进行判断,要先常量再写变量

if(num = 10) {} 
// 在这个地方,本来是想判断num是否等于10的,应该这么写(if(num == 10))却少写了一个等号。而这样编译器是不会报错的。
// 所以以后在用if判断变量是否等于一个常量的时候。就要把常量写在前面(if(10 == num))这样的话,就算少写一个等号,编译器就会立马报错。

if(num == 3.14) {} 
// 这种写法不好,与上面的原因是一样的。这里就不再赘述。
if(3.14 == num) {} 
// 用if判断变量是否等于一个小数的时候,不要直接与他做判断。
// 因为与小数判断,小数很容易失去精度。最好转换成字符串进行对比,或者用大于等于(小于等于)的形式来处理会更稳妥。



// if语句为了避免不必要的麻烦,即使是只有一条语句,也要写上大括号

switch语句

    /*
        标准格式
        switch(num){
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        default:
            printf("Other\n");
            break;
        }

         在case 语句后面最好不要定义变量,如果要定义的话就用大括号括起来
    */

在企业开发中, 能用if就用if,if更适合对区间的判断, 或者对多条件的判断

for循环

注意点

// 1.先编写循环结构的基本格式
// 2.将需要重复执行的代码拷贝到循环体重({}里面我们就称之为循环体)
// 3.确定循环结束的条件

for(int num = 0;num < 5;num++) {
    int num = 20;
    printf("%i\n", num );   // 20
}
// 在这段代码当中在QT当中是可以编译的。
// 内存当中,for类似于函数开辟了一个内存空间,然后for的大括号在for的内存空间当中又开辟了一个内存空间。

// 然而我在公司用sublime + MinGW 是不可行的。了解就好。

函数

注意点

    函数定义的格式
    返回值类型 函数名称(形参列表){
         被封装到函数中的代码;
    }

    同名函数不可以有多个,只可以有一个。
    函数声明可以有多个
    不可以嵌套函数定义

    // 在C语言当中,函数定义是不能定义在其它函数内的。就算可以编译,也不要这么做。因为这不标准。

    // 函数的声明可以在调用函数之前的任何地方,而且函数的声明可以重复出现,但是并没有什么用处。
    // 函数的实现只可以出现一次,不可以定义相同函数名的函数。

交换两个元素的值

    // 方式一
    int temp = a;
    a = b;
    b = temp;

    // 方式二
    a = a + b;
    b = a - b;
    a = a - b;

    // 方式三
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;

随机数

    // 首先要引入头文件
    #include 
    #include 
    
    // 代码
    srand(time(NULL));
    int num1 = rand();  //  随机生成0 至 2147483647之间的数
    // 若想要生成0到n之间的随机数就用以下的方法
    int num2 = rand() % n;
    // 若想生成大于2,小于9的随机数,可以按如下思想
    int num3 = (rand() % 7) + 2;

进制的代表

    在C语言中, 如果想用十六进制表示某个数, 前面需要加上0x
    在C语言中, 如果想用八进制表示某个数, 前面需要加上0
    在C语言中, 如果想用二进制表示某个数, 前面需要加上0b

进制的转换

    十进制 --> 二进制
    规则: 除2取余, 余数倒叙

    二进制 --> 十进制
    规则: 系数 * 基数(索引)

    十进制转换八进制
    规则: 除8取余, 余数倒叙

    八进制转换十进制
    规则: 系数 * 基数(索引)

    十进制转换十六进制
    规则: 除16取余, 余数倒叙

    十六进制转换十进制
    规则: 系数 * 基数(索引)

源码、反码、补码

  • 为什么会有源码、反码、补码这些东西呢?
  • 因为负数如果用源码在计算机中直接计算的话会出错。
  • 在计算机当中数据的运算都是补码的形式来处理的!!!

例如1-1
因为计算机只会做加法计算。所以在底层其实是这样的。
1 + (-1)

>           0000 0000 0000 0000 0000 0000 0000 0001
>      +    1000 0000 0000 0000 0000 0000 0000 0001
>  ---------------------------------------------------
>           1000 0000 0000 0000 0000 0000 0000 0010
>  最后它的值是-2,这就错了,所以引入的反码,补码的概念

正数的原码、反码、补码

正数的原码就是十进制转换成的二进制码
正数的反码、补码和原码一样

负数的原码、反码、补码

负数的原码就是这个数的正数的二进制码的基础上。第一个符号位变成1

> 1的源码: 0000 0000 0000 0000 0000 0000 0000 0001
> -1的源码:1000 0000 0000 0000 0000 0000 0000 0001

负数的反码就是在源码的基础上,符号位不变,其它位取反,1变0,0变1。

> -1的源码:1000 0000 0000 0000 0000 0000 0000 0001
> -1的反码:1111 1111 1111 1111 1111 1111 1111 1110

负数的补码就是在反码的基础上加1

> -1的反码:1111 1111 1111 1111 1111 1111 1111 1110
> -1的补码:1111 1111 1111 1111 1111 1111 1111 1111

位运算

& 按位与
| 按位或
~ 按位取反
^ 按位异或

  • 在C语言中0代表假, 1代表真
    & 按位与
    规则: 一假则假

    | 按位或
    规则: 一真则真
    
    | 按位或
    规则: 一真则真

    ~ 按位取反
    规则: 真变假, 假变真

    ^ 按位异或
    规则: 相同为假, 不同为真
<< 左移
>> 右移

内在分析

    变量的内存分析
    1.内存是连续的
    2.内存地址从大到小
    3.计算机会从内存地址大的开始分配内存(内存寻址从大到小)
    也就是说先定义的变量内存地址大于后定义的变量

你可能感兴趣的:(Week1)