今天不拉扯了 不拉扯了 碎碎念 上

本文详细讲解了计算机编程中的野指针和空指针概念,通过医生和病人的比喻生动阐述。并展示了如何在C语言中使用NULL初始化指针,以及位运算符、单目操作符等基础概念。涉及了整数补码存储、运算符和基本数据类型操作。
摘要由CSDN通过智能技术生成

/*
    上局还有一点没讲,就是野指针空指针

    举一个例子:医生和病人,医生指向(指针)病人(地址),医生指一号病人,二号病人这就是指针;假如3号病人有事走了(地址还给操作系统),医生还指3号病人,这就是野指针
    
    你完全不知道计算机给3号病人的位置放置了什么地址,万一是病毒呢?

    所以当你创建了指针,但还没确定指向时,一定要指向空(医生在没有病人的情况下,就不要乱指人看病),这就是空指针
*/

#include<stdio.h>
int main()
{
    int* point = NULL;//指向空指针
    return 0;
}

/*-------------------------------------------------
    
     补充几点对线小知识

     运算符,前面已经讲到算术运算符 + - * / %

     下面讲一下位运算符   <<   >>

 

*/

左移运算符:

讲解:

 

右移运算符: 

#include<stdio.h>
int main()
{
    int number = 2;
    
    int Number_two = number >> 1;//二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
    printf("Number_two = %d\n", Number_two);
    return 0;
}

// 位运算符还有 &按位与  |按位或  ^按位异或

 

#include<stdio.h>
int main()
{
    int number1 = 5;
    int number2 = 3;
    int number3 = number1 & number2;
    int number4 = number1 | number2;
    int number5 = number1 ^ number2;
    printf("number3 = %d\n", number3);
    printf("number4 = %d\n", number4);
    printf("number5 = %d\n", number5);
    return 0;
}

打印结果:

 

解释:

 

 

//赋值运算符额相对较简单,在这就不提了

 

//讲一下单目操作符(-2,负二,负号旁边只有一个数)    双目操作符(a+b,加号旁边有两个数)

 

#include<stdio.h>
int main()
{
    int number = 0;//在C中零和空表示假;非零非空为真
    printf("%d\n", !number);//   !逻辑反操作  number为0是假,反逻辑number为真就为非零和非空的数 在VS2022中 打印结果是1
    return 0;
}

代码解释:

 

 

//常用于if(条件)或者if(!条件)


    //  正数 +   负数 -,相对于容易理解,在这就不讲了;  sizeof以前讲过(计算变量和类型所占空间的大小的);  &取地址

 

/*
      先讲一下整数在计算机中的存储(补码)
      -1(负整数)    原码  10000000 00000000 00000000 00000001  C规定最高位为符号位,负数最前面数字是1,正数0
                     反码  11111111 11111111 11111111 11111111   符号位不变,其他位按位取反
                     补码  11111111 11111111 11111111 11111111   反码+1就是补码
     
     正整数原码反码补码相同

     为什么整数在计算机中以补码的形式存储呢?方便计算  举个例子  -1 + 1 
       
      如果拿原码进行计算  -1原码   100000000 00000000 00000000 00000001
                         1原码   00000000 00000000 00000000 00000001   
                         加起来10000000 00000000 00000000 00000010答案是2 不符合逻辑的

      拿补码相加         -1补码   11111111 11111111 11111111 11111111
                         1补码   00000000 00000000 00000000 00000001
                         相加   1 00000000 00000000 00000000 00000000 
               一个int类型4个字节,32个比特位,1舍去 为00000000 00000000 00000000 00000000
     */

#include<stdio.h>
int main()
{
    int number1 = 0;
    printf("number = %d\n", ~number1);//  ~按位取反
    return 0;
}

/*前置++(--原理相同)   后置++(--原理相同)*/ 

前置++:

#include<stdio.h>
int main()
{
    int number2 = 2;
    int number3 = ++number2;
    printf("number3 = %d\n", number3);//先++后使用 (先number2 + 1 = 3,再给number3)
    return 0;
}

后置++: 

#include<stdio.h>
int main()
{
   int number2 = 2;
    int number4 = number2++;
    printf("number4 = %d\n", number4); //先使用后++   (先将number2的值给number4,再将number2 + 1,此时number2的值为3)
    return 0;
}

 // int number5 = 3.14;整形类型你给我一个浮点型的值?? 编译器会报错  怎么办呢?

 

这时就用到强制类型转换

#include<stdio.h>
int main()
{
   int number5 = (int)3.14;
    printf("%d\n", number5);
    return 0;
}

//关系运算符 >=    <=   ==    > 等等啊    一般用在判断循环语句中的判断条件  


  //逻辑操作符  &&逻辑与  ||逻辑或  一般也是用在判断循环语句中的判断条件 

后面的,小目录:


  //条件操作符(也叫三元操作符)  //举个例子,给你年份,让你看这年2月有多少天

 

#include<stdio.h>
int main()
{
    int years = 0;
    scanf_s("%d", &years);
    int days = (years % 400 == 0 || (years % 4 == 0 && years % 100 != 0)) ? 29 : 28; //a?b:c  a成立(为真)计算b,不成立(为假)计算c
    printf("days=%d\n", days);
    return 0;
}

//逗号表达式  用逗号隔开的一串式子

#include<stdio.h>
int main()
{
    int number1 = 5;
    int number2 = 4;
    int number3 = (number1 + 2, number2 - 3, number1 + 1);//(number1 + 2, number2 - 3, number1 + 1)逗号表达式,从左向右以此计算,计算结果为最后一个式子number1 + 1
    printf("number3=%d", number3);//打印结果为6
    return 0;
}

//  []下标引用操作符 (数组那)  ;  ()函数调用操作符,printf()中的()等等;  .   ->(结构体那讲过)

谢谢大家观看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小手冰凉ya

你的鼓励是我最大动力谢谢你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值