码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 单目操作符


    目录

    ! --- 逻辑反操作

    & --- 取地址操作符

    * --- 间接访问操作符(解引用操作符)

    sizeof --- 操作数的类型长度(单位为字节)

    ~ --- 对一个数的补码二进制按位取反

    前置++和前置--

    后置++和后置--

    (类型) --- 强制类型转换


    ! --- 逻辑反操作

    把假变为真,把真变为假

    代码演示:

    1. #include
    2. int main()
    3. {
    4. int flag = 0;
    5. if (flag)
    6. printf("execute flag\n");
    7. //逻辑反操作
    8. if (!flag)
    9. printf("execute !flag\n");
    10. return 0;
    11. }

    在C语言中,0为假,一切非0为真,所以将flag单独放在if判断语句内,是不会进入if语句中的,但是当前面加一个逻辑反操作,就会将假变为真,则会执行第二条if语句中的内容

    代码验证:


    & --- 取地址操作符

    * --- 间接访问操作符(解引用操作符)

    区分与按位与操作符,按位与操作符属于双目操作符

    代码演示:

    1. #include<stdio.h>
    2. int main()
    3. {
    4. int a = 10;
    5. printf("a原来的值 = %d\n", a);
    6. //取地址操作符取出a的地址,用同类型的指针变量接收
    7. int* pa = &a;
    8. //解引用操作符,将pa解引用,
    9. //通过pa存放的地址,找到指向的空间内容,并赋值为20
    10. //也就是将变量a的值重新赋值为20
    11. *pa = 20;
    12. printf("a通过指针变量改变的值 = %d\n", a);
    13. return 0;
    14. }

    代码验证:


    sizeof --- 操作数的类型长度(单位为字节)

    sizeof不是函数,是操作符

    sizeof计算的是类型创建变量的大小,单位是字节

    代码演示:

    1. #include
    2. int main()
    3. {
    4. int a = 10;
    5. printf("%d\n", sizeof(int));
    6. printf("%d\n", sizeof(a));
    7. printf("%d\n", sizeof a );
    8. return 0;
    9. }

    代码验证:

    由最后一条代码可证明sizeof不是函数,因为可以把括号去掉,同样计算出a所占空间的字节,但函数不能去掉括号

    sizeof和数组名的相关知识请见:对于数组名的理解-CSDN博客


    ~ --- 对一个数的补码二进制按位取反

    代码演示:

    1. #include
    2. int main()
    3. {
    4. int a = 0;
    5. int b = ~a;
    6. printf("b = %d", b);
    7. return 0;
    8. }

    那么b的值为多少呢?

    代码解析:

    整数0存储在int类型变量a中的补码:

    变量a按位取反后的补码:

    存储至变量b中的原码:

    由此可得b的值为-1

    代码验证:


    前置++和前置--

    先++(或--),再使用

    代码演示:

    1. #include
    2. int main()
    3. {
    4. int a = 1;
    5. int b = ++a;
    6. printf("a = %d; b = %d\n", a, b);
    7. return 0;
    8. }

    变量a先自增1,变为2,再赋值给变量b,所以打印出来a为2,b为2

    代码验证:

    前置--同理


    后置++和后置--

    先使用,后++(或--)

    代码演示:

    1. #include
    2. int main()
    3. {
    4. int a = 1;
    5. int b = a++;
    6. printf("a = %d; b = %d\n", a, b);
    7. return 0;
    8. }

    先将a原来的值赋值给b,b就为1,赋值后a自增1,a就为2

    代码验证:

    后置--同理 


    (类型) --- 强制类型转换

    1. #include
    2. int main()
    3. {
    4. int a = (int)3.14;
    5. printf("a = %d\n", a);//a = 3
    6. return 0;
    7. }

    将3.14这个小数强制类型转换为int类型,并且存储到变量a中,那么a的值就为3,直接舍去小数

    常规用法:

     一般用于动态开辟内存时才强制类型转换为相对应的类型

    1. #include
    2. #include
    3. int main()
    4. {
    5. //开辟20个字节的动态空间
    6. int* ptr = (int*)malloc(sizeof(int) * 5);
    7. return 0;
    8. }
  • 相关阅读:
    复现OpenVLA:开源的视觉-语言-动作模型及原理详解
    【2022CSPJ普及组】T1.第一题乘方pow
    493. 翻转对
    [深度学习][预训练模型]darknet-yolov7预训练模型下载地址
    红队专题-REVERSE二进制逆向反编译
    springfox-swagger2 2.9.2 POST方式 Description优化
    香港写字楼等级如何划分?从3A到C级一文讲明白
    Flink系列之Flink中Broadcast和Counter整理和实战
    iOS 16 SwiftUI列表(List)项包含 Label 视图导致分隔线变短的解决
    打造经典游戏:HTML5与CSS3实现俄罗斯方块
  • 原文地址:https://blog.csdn.net/weixin_55341642/article/details/140052680
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号