• 【C语言】你真的懂常量吗?二进制的条条框框你还记得吗?(每日小细节002)


    前言:

    欢迎打开这篇博客,从今天开始,每天和大家分享一个C语言小细节,不久之后还会追加C++

    一些常常被忽视的小细节思想统一的编程题目是这个专栏的核心哦

    虽然简单但千万别在细节处失分!!!!

    每日花一两分钟浏览一下加深一个知识点不香吗

    感兴趣的赶紧收藏关注起来吧,不要迷路~

    目录

    1.常量的分类和细节

    2.整数转换


    1.常量的细节和分类

    常量的分类:

    1. 字面常量,比如int a > 3,这里的3就是字面常量,此外“a” "abc" 也是字面常量,因为字符存储的都是码值,也是一种数字,切记字面常量不可更改!

         2.const修饰的常变量,本质是变量但是有常属性,但是在必须要常量的地方他就失效了,比如int arr[]  []里面就不可以放入const修饰的常变量

    1. int main()
    2. {
    3. const int a = 10;
    4. int* p = &a; //报错
    5. *p = 20;
    6. printf("%d", a);
    7. }

    这里书写是不正确的为什么呢,正常的常量都可以&啊! 

    千万注意!常属性不代表变量不可更改

    准确的说是变量对应的地址  指向的数据不可更改

    对于简单类型的数据(布尔型,数值,字符串),值就是保存在变量指向的地址里,所以等同于常量(不可更改),但是对于更复杂类型的数据(对象,数组),变量指向的地址,只是一个保存实际数据的指针,const只能保证指针是不变的,但是指针指向的数据他就不能保证一定不可修改了

        3.#define定义的标识符常量,宏

    一定要注意没有分号; 

    1. #define MAX 10 //没有分号;
    2. int main()
    3. {
    4. printf("%d",MAX);
    5. }

    并且宏只能替换不能计算!!!!(重点)

    来看这个题

     N被定义成常量2

    M被定义为N+1——>2+1    千万注意这里不是3!因为不能计算只能替换

    NUM被定义为(M+1)*M/2——> (2+1+1)*2+1/2    绝对不是(2+1+1)*(2+1)/2 

    所以最后结果是8.5但是用%d打印应该是8 

        4.enum枚举常量 

    注意符号的运用

    1. enum Sex
    2. {
    3. MALE,
    4. FEMALE,
    5. SECRET
    6. };
    7. int main()
    8. {
    9. enum Sex p = FEMALE;
    10. printf("p=%d\n", p); //结果是1
    11. return 0;
    12. }

     默认从第一个元素开始记为0,一次递增

    2.整数转换

    首先来回忆一下二进制的各种规则吧

    计算机最擅长计算二进制,是因为很多硬件都是二进制的,就好比人最擅长十进制,因为人有十根手指。

    最本质的二进制计算规则都是在补码上进行的,关于原反补的计算简单来说

     

    具体在C不会断句?【前后置,位,移位操作符详解】 b = ++c, c++, ++a, a++_tt142的博客-CSDN博客 这篇我的博客里面 

    思路很简答,主要就是考察位操作符的熟练使用

    统计需要变动几位能把两个数字变成相等,也就是两个数字二进制序列(补码)有几个不一样的位,把个数统计出来就是结果 

    所以用^ 按位异或,相同为0,相异为1,最后统计1的个数即可

    (二进制1的个数在这篇文章里详细讲解过https://blog.csdn.net/weixin_71138261/article/details/126305840?spm=1001.2014.3001.5501)

    1. int convertInteger(int A, int B){
    2. int n=A^B;
    3. int count=0;
    4. for (int i = 0; i <32; i++)
    5. {
    6. if (1& (n>>i))
    7. count++;
    8. }
    9. return count;
    10. }


    如果有所收获的话点个赞吧

    创作不易,感谢观看

  • 相关阅读:
    Ae 效果:CC Force Motion Blur
    springcloud05——Zookeeper实现支付微服务
    【多AZ】浅述云计算多az
    智能合约漏洞,价值 50 万美元 BNO 攻击事件原理分析
    RDD—Transformation算子
    [附源码]SSM计算机毕业设计高校创新创业服务平台JAVA
    数据结构(5)树形结构——二叉搜索树(JAVA代码实现)
    PCIe ECAM机制
    IM开源项目OpenIM部署文档-从准备工作到nginx配置
    【JavaSE】泛型通关教程
  • 原文地址:https://blog.csdn.net/weixin_71138261/article/details/126580347