• C-C Primer Plus阅读笔记


    常用头: stdio.h string.h inttypes.h limits.h float.h

    1.打印short、long、long long和unsigned

    #include <stdio.h>
    
    int main(void) {
            unsigned int un = 3000000000;
            short end = 200;
            long big = 65537;
            long long verybig = 12345678908642;
            printf("un = %u and not %d
    ", un, un); //u=ud
            printf("end = %hd and %d
    ", end, end);
            printf("big = %ld and not %hd
    ", big, big);
            printf("verybig=%lld and not %ld
    ", verybig, verybig);
            return 0;
    }

      结论:即使是变量本身是无符号类型, 打印的时候也需要加上u, 否则按有符号类型打印; 如果用短类型去打印长类型, 则会被截取最后N位

    2.八进制或十六进制表示一个字符

    char c = '101';
    char ch = 'x41';

      PS:为什么使用'101'而不是0101表示一个字符, 因为'101'更能清晰的表达一个字符的意图, 其次'101'这样的转义序列可以嵌入到C字符串中, 如"Hello!101 "

    3.缓冲区满、遇到换行符及需要输入的时候会将缓冲区内容输出到屏幕

    4.浮点型常量默认是double(可以加后缀f为float型存储), 整型常量默认以int型存储(可以加后缀l把小整数变为long型存储), 如果int不能表示则用long, 如果long不能表示则用unsigned long, 如果仍然不够则使用long long或unsigned long long来表示

    5.类型转换http://www.cnblogs.com/JohnABC/p/4466113.html

    6.scanf 在读取字符串时遇到空格即停止

    7.printf("*%5.3d*", 2); 结果为 *  002*

    8.

    #include <stdio.h>
    
    int main() {
            float n1 = 3.0;
            float n2 = 3.0;
            long n3 = 2000000000;
            long n4 = 1234567890;
            printf("%ld %ld %ld %ld
    ", n1, n2, n3, n4);
            return 0;
    }

      输出0 1074266112 0 1074266112

    9.printf 工作原理

      如8中的例子

    printf("%ld %ld %ld %ld
    ", n1, n2, n3, n4);

      该调用告诉计算机把变量n1, n2, n3, n4的值传递给计算机, 计算机把他们放置到堆栈的一块内存中, 计算机根据变量的类型而非转换说明符把这些值放到堆栈中, 所以n1在堆栈中占用8个字节(float被转换成double), 同样, n2占用8个字节, n3和n4分别占用4个字节, 然后控制转移到printf函数, 该函数从堆栈把值读出来, 但是在读取时, 它根据转换说明符去读取, %ld说明符指出, printf应该读取4个字节, 索引printf在堆栈中读取前4个字节作为它的第一个值, 这就是n1的前半部分, 它被解释成一个长整数, 下一个%ld说明符再读取4个字节, 这就是n1的后半部分, 它被解释成第二个长整数, 同样%ld的第三个和第四个实例使得n2的前半部分和后半部分被读出, 并被解释成两个长整数, 所以虽然n3和n4的说明符都正确, 但是printf仍然读取了错误的字节

  • 相关阅读:
    MDCFilter
    SpringCloud组件:Eureka服务注册用ip或主机名
    git查看分支创建于哪个分支
    关于FeignClient使用大全
    tinyint能不能保存负数
    QCon 回顾 | Data Fabric:逻辑统一、物理分散
    国产开源存储之光:Curve 通过信创认证
    有数大数据基础平台之智能运维平台EasyEagle介绍:集群队列篇
    数据治理体系演进简介
    Arctic开源!网易数帆×华泰证券,推动湖仓一体落地
  • 原文地址:https://www.cnblogs.com/JohnABC/p/4462157.html
Copyright © 2020-2023  润新知