惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
L
LINUX DO - 热门话题
Engineering at Meta
Engineering at Meta
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
Attack and Defense Labs
Attack and Defense Labs
P
Privacy & Cybersecurity Law Blog
V
Visual Studio Blog
NISL@THU
NISL@THU
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
SecWiki News
SecWiki News
人人都是产品经理
人人都是产品经理
Jina AI
Jina AI
Last Week in AI
Last Week in AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Threatpost
TaoSecurity Blog
TaoSecurity Blog
L
LINUX DO - 最新话题
量子位
Security Latest
Security Latest
博客园 - 司徒正美
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
I
Intezer
P
Privacy International News Feed
P
Palo Alto Networks Blog
爱范儿
爱范儿
有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
Cloudbric
Cloudbric
P
Proofpoint News Feed
V
Vulnerabilities – Threatpost
阮一峰的网络日志
阮一峰的网络日志
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 三生石上(FineUI控件)
美团技术团队
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
雷峰网
雷峰网
Hugging Face - Blog
Hugging Face - Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
The Cloudflare Blog
博客园_首页
博客园 - 聂微东
Hacker News - Newest:
Hacker News - Newest: "LLM"
S
Securelist
Spread Privacy
Spread Privacy
小众软件
小众软件
PCI Perspectives
PCI Perspectives
T
Troy Hunt's Blog

Posts on Changkun's Blog

Why High-Output Systems Are Often the First to Stop Growing Dark Forest Theory: A Formal Derivation Agents (or Humans) in Goal-Directed and Goalless Environments: On Pipelines, Priors, and the Rhythm Between Exploration and Exploitation At the Boundary of Self-Reference: From Stable Structures in Artificial Intelligence to the Self as a Recursive Model in an Open Dissipative System 2023 Reading List 2022 Reading List 2021 Reading List Are PSS/USS and RSS Actually the Same Thing? Performance Differences from Page Faults vs. Prefetching 2020 Year-End Review Migration with Zero Downtime 2020 Reading List The All in Go Stack Pointers Might Not Be Ideal for Parameters Eliminating A Source of Measurement Errors in Benchmarks Setup Wordpress in 10 Minutes 我为什么不再写博客了? 2019 年终总结 2018-2019 读书清单 Ten years of blogging Rethinking the Reflections on Communications and Trusts 2018 年终总结 Go source code study is open source Go source study: unsafe Pattern Go source study: sync.Pool Go runtime programming A Million WebSocket and Go Designing Asynchronous RESTful APIs 分布式杂谈01:CAP 理论的误解 Issues of Human-Bot Interaction 压缩法与深度网络的泛化性 Go in 1 Hour UMSLT04: The Past and Present of SGD UMSLT03: A Gentle Start of Learning Theory UMSLT02: A Breif History of Neural Networks UMSLT01: A Breif History of Regularization 不笑不足以为道 论文笔记:Generalization in Deep Learning 2017 年终总结 2017 读书清单 深度学习的泛化理论简介 删除 GitHub 上已经提交的敏感信息 硕士生涯的第一年就这样告一段落了 人肉计算(10): 系统参与激励 人肉计算(9): 陷阱的解法 别聊,一聊你就暴露 人肉计算(8): 人肉计算与数据科学中的陷阱 人肉计算(7): 社会行为分析 Hexo + GitHub + Travis CI + VPS 自动部署 人肉计算(6): 预测市场 人肉计算(5): 信用风险评级模型 读书与回报 瞎扯: 对现代企业理论与当下IT企业的商业模式和信息产业链的规律性的思考 人肉计算(4): 输入数据聚合与PageRank 又一次打整了一下博客 人肉计算(3): 输入数据聚合与链路预测 人肉计算(2): 意图博弈 GWAPs 人肉计算(1): 众包与群众智慧 对后辈同学在计算机专业上的答疑与解惑 在德国的医疗及住院体验 这可能不是一个技术博客了 实验楼楼赛第3期-Python-题解 迅速更换了 DISQUS Electron 深度实践总结 良好的编码体验的三个方面 2016 年终总结 2016 读书清单 最近在着手写的文章 微信小程序文档极致总结 谈谈过去三个月在实验楼的实习经历 Built a Desktop Client for My Blog Guacamole 源码分析与 VNC 中 RFB 协议的坑 《高速上手 C++11/14》正式发布 Docker 极速入门教程02 - 镜像与容器管理 Docker 极速入门教程01 - 基本概念和操作 阶段性沉默 ELK+Redis 最佳实践 终于全面启用了 HTTPS 苹果开源了LZFSE无损压缩 Hash 碰撞的一种思路 记一次完整的 Kaldi-TIMIT 示例运行 Kaldi 上的 TIMIT 例子 Kaldi 安装与部署 从科研写作谈起 Swift API 设计指南 有趣的人类 所以其实论文并没有什么鬼用 Githug 通关记录及指南 小结一下这学期的收获 2015 读书清单 2015 年终总结 负能量爆表 转眼就快两个月了 博客迁移记录 大三总结 这个世界,终究不会是我们的。 Linux 内核分析 之六:Linux 内核创建进程的过程 小说「泽缘」 Linux 内核分析 之五:system_call中断处理过程的简要分析 大创项目的标题真是每年都在考验同学们的想象力啊
C Details 之 基本细节
Changkun Ou · 2013-03-28 · via Posts on Changkun's Blog

Published at发布于:   |   PV/UV: /   |   Reading阅读: 1 min

1、有效数字

一般而言,double型数据可以接受实型常量的16位有效数字,而float型变量仅能接受实型常量的7位有效数字, 在有效数字后面输出的数字都是不准确的。

例如:

1
2
float  a = 123456.7890123456e12;
double b = 123456.7890123456e12;

可以尝试:

1
printf("%f\n%f\n",a,b);

2、变量定义的位置

C语言中要求定义变量必须在所有可执行语句之前。

例如:

1
2
3
printf("Input n:");
int n;
scanf("%d",&n);

这一规定仅仅只是在C89中规定,从C99开始便取消了这一规定并且,C++也并没有这一规定,例如:

1
2
for( int i = 0; i < Num; i++ )
    Do something;

3、关于自增

一个疑问:对于

1
2
3
a = 1;
b = a++;
c = ++a;

为什么b的值为1,c的值为2?

先解答为什么会出现这个问题:

因为根据C运算符的优先级与结合性可以知道,++运算符的优先级是高于=运算符的。

再来解答这是为什么:

b = a++; 的实际效果是 b = a;a = a + 1; 但是之前我们提到,其实++运算符的优先级是高于=运算符的, 但是为什么没有发生 b 的值为 2 的情况,这是因为如果按照这一优先级,b = a++ 则会变成 (b = a)++, 这样的话就违背了语言的本意。总结来说就是,这类情况属于 C 语言未定义的那部分东西,就好像 j++ + ++j 这种无聊的东西结果是会和编译器有关系的,它本身就包涵错误。最好的解决办法是:尽量使用括号。

4、一些常用的格式转换说明符

函数printf()的格式转换说明符

符号 说明
%d 输出带符号的十进制整数。
%u 以无符号的十进制整数形式输出。
%o 以无符号的八进制整数心事输出,不输出前导符0(八进制整数由0开头)。
%x 以无符号十六进制整数形式(小写)输出,不输出前导符0x。
%X 以无符号十六进制整数形式(大写)输出,不输出前导符0x。
%e 以指数形式(小写e表示指数部分)输出实数,要求小数点前必须有且仅有一位非零数字。
%E 以指数形式(大写E表示指数部分)输出实数。

5、随机函数rand()

随机函数rand()产生的是一个在 0~RAND_MAX之间的整数,符号常量RAND_MAX是在头文件stdlib.h中

定义的,因此使用该函数时需要包涵头文件stdlib.h

标准C规定RAND_MAX的值不大于双字节整数的最大值32767。

可以采用下面方法来控制计算机生成的随机数的取值范围:

  1. 利用取余运算rand()%b将函数rand()生成的随机数变化到0~b-1之间。

  2. 利用rand()%b+a运算将随机数取值范围平移到[a,a+b-1]之间。

实际上,函数 rand 所产生的随机数其实只是一个伪随机数,反复调用函数rand()所残生的一些列数看似是随机的,但每次执行程序所产生的随机数序列却是一样的,都是相同的一个数列,而程序又每次值用到了数列中的第一个随机数。

解决这个问题的办法是使程序每次运行时产生不同的随机数列。残生这种随机数的过程称为“随机化”,他是通过调用标准库函数 srand() 为函数 rand() 设置随机数种子来实现的。它的原型为:

1
void srand(unsigned seed);

但是这个的弊端就是每次都必须通过向 srand() 传入一个随机数种子来完成随机化。在头文件 <time.h> 中的函数 time() 返回以秒计算的当前时间值,即一个代表时间的字符串,使用 NULL 作为 time() 的参数时,time(NULL) 的返回值被转换为一个无符号整数,可以作为随机数发生器种子。因此我们可以通过编写