<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>C++ on Zirnc's Blog</title><link>https://blog.chungzh.cn/blog/c-/</link><description>Recent content in C++ on Zirnc's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sun, 21 Aug 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.chungzh.cn/blog/c-/index.xml" rel="self" type="application/rss+xml"/><item><title>位运算笔记</title><link>https://blog.chungzh.cn/oi-history/bit-operation/</link><pubDate>Sun, 21 Aug 2022 00:00:00 +0000</pubDate><guid>https://blog.chungzh.cn/oi-history/bit-operation/</guid><description>基本概念 比特（bit，亦称二进制位）是指 1 位二进制的数码（0 或 1），是计算机中信息的最小单位。
字节（byte）：一个字节由 8 位组成。
熟练地运用位运算，可以提高我们程序的时空效率。
计算机中的整数存储与运算 下面以 32 位二进制数，即 C++ 中的 int 和 unsigned int 类型为例。
原码、反码 简单介绍一下：
原码：最高位为符号位，正数为 $0$，负数为 $1$，其余所有位为十进制数的绝对值。
优点：对人类而言最直观。 缺点：无法将减法转换成加法运算。如：$1-1=1+(-1)=0001+1001=1010=-2$；$0$ 有两种表示方法 $0000$ 和 $1000$。 反码：最高位为符号位，正数为 $0$，负数为 $1$。正数的反码等于本身，负数的反码除符号位外，各位取反。
优点：解决了减法运算的问题。$1-1=1+(-1)=0001+1110=1111=0$ 缺点：$0$ 有两种表示方法 $0000$ 和 $1111$；减法算法规则较复杂，需要额外判断溢出。 补码 32 位无符号整数 unsigned int： 直接把这 32 位编码 $C$ 看作 32 位二进制数 $N$。
32 位有符号整数 int： 以最高位作为符号位，$0$ 表示非负数，$1$ 表示负数。</description></item><item><title>关于 int 与 long long 的运算速度</title><link>https://blog.chungzh.cn/oi-history/int-vs-longlong/</link><pubDate>Fri, 22 Jul 2022 00:00:00 +0000</pubDate><guid>https://blog.chungzh.cn/oi-history/int-vs-longlong/</guid><description>前言 写一道 CF 题的时候，算法明明是正确的，却一直都 TLE。最后把一个 long long 类型的数组改成了 int，竟然就 AC 了。。
这不禁引发了我的思考，int 与 long long 的运算速度不一样吗？
不严谨测试 由于本菜鸡并没有什么计算机基础原理的知识，只好做了一个测试。当然，这个测试其实很不严谨，没有很大的参考价值。我也就图一乐，哈哈哈哈哈
测试环境 电脑：Lenovo Yoga 14sACH 2021 系统：Windows 11 25163.1010 CPU：AMD Ryzen 7 5800H with Radeon Graphics (16) @ 3.200GHz RAM：16.0 GB 编译器：GCC 11.2.0 代码 仅仅是为了图一乐， 我第一次使用了 Google Benchmark 这一工具。其实挺好上手的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 #include &amp;lt;benchmark/benchmark.</description></item><item><title>Notepanda 开发小结</title><link>https://blog.chungzh.cn/oi-history/notepanda/</link><pubDate>Sat, 16 May 2020 10:45:00 +0000</pubDate><guid>https://blog.chungzh.cn/oi-history/notepanda/</guid><description>前言 最近开始学习 Qt，然后就挖坑了一个小玩具 Notepanda，顺便看看能不能替代诸如 notepad、gedit 之类的软件。顺便锻炼一下自己。
GitHub repo
Feature 基本的文本编辑操作（没想到吧这也是 feature 了哈哈哈哈哈哈） 行号显示 语法高亮 从命令行启动。（如 notepanda 或者 notepanda CMakeLists.txt） 除此之外还实现了自定义字体、字号、Qt 主题和 Status Bar 等一些小功能。
以后的目标是实现多标签页，并对 Markdown 做一点优化（比如预览），如果有可能还会加进去一个 terminal。计划在 GitHub Projects。
目前还是很弱的一个东西，不过等查找、替换等 feature 实现之后，基本上可以替代 Windows 的 notepad 了。
Screenshots 实现 这部分大概讲讲思路吧。
布局 编辑控件 使用了 Qt 提供的 QPlainTextEdit 类，适合纯文本编辑。刚开始还用的是 QTextEdit，想想自己真是傻了，又不是要编辑富文本哈哈哈。
不过 QPlainTextEdit 似乎有点点慢，我也没能力造轮子，于是就将就着用吧。
语法高亮 刚开始想实现的时候看见了 Qt 官方的 Syntax Highlighter Example，很棒对吧。但是我可不想花精力去写一堆语言的规则呢！
然后就找到了 KDE Framework 里的 KSyntaxHighlighting。KDE Framework 是真的烦人，刚开始怎么也 build 不出来。等到了 GitHub Actions 上，整整用了四天时间才搞定，还是在某 Packman 的帮助下才完成的。。。当时看到绿绿的 Actions，我差点没开心得疯掉。。</description></item><item><title>Windows 中 C++ 测量时间的 N 种方法</title><link>https://blog.chungzh.cn/oi-history/cpp-get-time/</link><pubDate>Sun, 29 Mar 2020 13:13:00 +0000</pubDate><guid>https://blog.chungzh.cn/oi-history/cpp-get-time/</guid><description>测量可测量之物，将不可测量之物变为可测量。——伽利略</description></item><item><title>优雅地使用 C++ 制作表格：tabulate</title><link>https://blog.chungzh.cn/oi-history/tabulate/</link><pubDate>Fri, 21 Feb 2020 11:45:00 +0000</pubDate><guid>https://blog.chungzh.cn/oi-history/tabulate/</guid><description>优雅地用 C++ 做表格！</description></item></channel></rss>