测试处理器是大端序还是小端序(Big Endian or Little Endian)

下面的程序提供了两种方法判断处理器字节序: 方法一:指针强制转换 #include <stdio.h> /* 返回 1 表示小端序,0 表示大端序 */ int is_little_endian(void) { int x = 1; return *(char *)&x == 1; } int main(void) { if (is_little_endian()) printf("little-endian\n"); else printf("big-endian\n"); return 0; } 方法二:利用 union #include <stdio.h> /* 返回 1 表示小端序,0 表示大端序 */ int is_little_endian_union(void) { union { int i; char c[sizeof(int)]; } unx; unx.i = 1; return unx.c[0] == 1; } int main(void) { if (is_little_endian_union()) printf("little-endian\n"); else printf("big-endian\n"); return 0; } 什么是大端序/小端序啊? 出处是“爱丽丝梦游仙境”里的鸡蛋的吃法,从小端开始吃还是从大端开始吃,如下图: 参考: wikipedia

2015年4月19日 · 1 分钟 · Jid

开始使用 C++11 的 9 个理由

代码能跑不代表没有改进空间。以下是切换到 C++11 的 9 个理由。 性能提升 1. Move 语义 避免不必要的深拷贝。当源对象是临时对象时,直接"偷走"资源而不是复制: // C++03:深拷贝,浪费 std::string s = get_temp_string(); // C++11:move,零拷贝 std::string s = std::move(get_temp_string()); STL 容器(string、vector 等)已内置支持,存储到容器时自动优化。 2. 模板元编程优化 通过 type_traits(如 is_floating_point)和 enable_if,为特定类型定制模板实现。 3. 哈希表 标准库新增 unordered_map、unordered_set 等,基于哈希表实现,查找 O(1),比 map(红黑树 O(log n))更快。 开发效率 4. auto 关键字 自动类型推导,减少冗余代码: // C++03 std::vector<std::vector<MyType>>::const_iterator it = v.begin(); // C++11 auto it = v.cbegin(); 5. Lambda 表达式 定义匿名函数,配合 STL 算法使用非常方便: bool is_safe() { return std::all_of(tanks.begin(), tanks.end(), [this](const Tank& t) { return t.fuel_level() > min_level; }); } 6. 智能指针 unique_ptr 和 shared_ptr 替代原始指针,自动管理内存,杜绝泄漏: auto p = std::make_unique<MyClass>(); // 离开作用域自动释放 7. std::function 函数作为一等对象,可以包装函数指针、lambda、仿函数等任何可调用对象: std::function<int(int, int)> op = [](int a, int b) { return a + b; }; 8. 更清晰的表达 override、final、nullptr、enum class 等让代码意图更明确,减少 bug。 ...

2015年4月13日 · 1 分钟 · Jid

Firefox 修改 Backspace 键行为

问题 Firefox 在 Linux/macOS 上,Backspace 键默认不执行"后退"操作。Windows 用户习惯用 Backspace 后退。 解决 地址栏输入 about:config,搜索 browser.backspace_action,双击修改值: 值 行为 0 Backspace = 后退,Shift+Backspace = 前进 1 Backspace = 页面向上滚动 2 Backspace 无操作(默认) 修改后立即生效。 其他导航快捷键 快捷键 功能 Alt + ← 后退 Alt + → 前进 Ctrl + [ 后退(部分系统) Ctrl + ] 前进(部分系统)

2015年4月11日 · 1 分钟 · Jid

Firefox 切换中英文界面

英文 → 中文 1. 安装中文语言包 访问 Firefox 语言包目录,找到对应版本的 zh-CN.xpi 安装: https://ftp.mozilla.org/pub/firefox/releases/版本号/win32/xpi/zh-CN.xpi 或直接在 Firefox 附加组件中搜索"Chinese"安装。 2. 修改语言设置 地址栏输入 about:config,搜索 general.useragent.locale,改为 zh-CN。 重启 Firefox 即可。 中文 → 英文 同理:安装 en-US.xpi,将 general.useragent.locale 改为 en-US。 较新版本的 Firefox 可直接在 设置 → 常规 → 语言 中切换,无需手动修改配置。

2015年4月7日 · 1 分钟 · Jid

Firefox 启用或禁用 JavaScript

问题 Firefox 23+ 在首选项中移除了 JavaScript 开关。如果 JS 被意外禁用,需要通过隐藏配置修改。 解决方法 地址栏输入 about:config,点击"接受风险并继续" 搜索 javascript.enabled 双击该条目切换 true(启用)/ false(禁用) 立即生效,无需重启。 也可以安装 NoScript 扩展,按站点精细控制 JS 权限,比全局开关更实用。

2015年4月6日 · 1 分钟 · Jid

怀旧:Turbo C 经典版本回顾

Turbo C 的历史 Turbo C 是 Borland 公司推出的 C 语言集成开发环境,在 DOS 时代是学习 C 语言的标准工具。 版本 年份 主要特性 Turbo C 1.0 1987 全新集成开发环境,编辑/编译/运行一体化 Turbo C 1.5 1988 增加图形库和文本窗口函数库 Turbo C 2.0 1989 增加查错功能,Tiny 模式生成 .COM 文件 Turbo C 2.01 1989 Bug 修复版 Turbo C++ 3.0 1992 面向对象,C++ 支持 Borland C++ 1991 Windows 3.0 支持,新一代产品 Turbo C 2.0 因性能稳定,在教育领域使用了近二十年,是很多人的 C 语言启蒙工具。 使用方式 安装版:运行 INSTALL.EXE,会自动设置目录结构 免安装版:解压后直接运行 TC.EXE,建议放在 D:\TURBOC2(路径不能有中文和空格) 下载地址 Turbo C 2.01 英文原版:CSDN Turbo C 2.0 免安装版:CSDN 或 SkyDrive ⚠️ 链接为 2015 年上传,可能已失效。 ...

2015年4月2日 · 1 分钟 · Jid

修改 Thunderbird 回复邮件格式

问题 Thunderbird 默认回复邮件时,回复内容在引用原文的下方,不符合国内邮件习惯。 解决步骤 1. 回复内容置于最上方 中文界面: 工具 → 选项 → 高级 → 常规 → 配置编辑器 → 搜索 mail.identity.default.reply_on_top,将值从 0 改为 1。 英文界面: Edit → Preferences → Advanced → Config Editor → 搜索同上。 2. 自定义回复头部格式 安装 SmartTemplate 扩展(工具 → 附加组件 → 搜索安装),然后在扩展选项中配置回复模板: -------- 原始信息 -------- <b>发件人</b>: %from% <b>日期</b>: %date% <b>收件人</b>: %to% <b>抄送</b>: %cc% <b>主题</b>: %subject% 3. 常用宏 宏 含义 %from% 发件人完整信息 %from(name)% 发件人姓名 %from(mail)% 发件人邮箱 %date% 原始邮件日期 %to% 收件人 %cc% 抄送人 %subject% 主题 %Y%-%m%-%d% 年-月-日格式 用 {...} 包裹的内容只在宏有值时显示,例如 {抄送: %cc%} 只在有抄送时出现。 ...

2015年3月21日 · 1 分钟 · Jid

cppman:在终端查看 C++ 文档的利器

简介 cppman 从 cplusplus.com 抓取 C++ 标准库文档,以 man page 格式在终端中展示。比 libstdc++ 文档更方便,是 C++ 程序员的效率工具。 安装(Ubuntu) # 1. 添加 PPA 源 sudo add-apt-repository ppa:aitjcize/manpages-cpp sudo apt-get update # 2. 安装 sudo apt-get install manpages-cpp # 3. 缓存文档数据(首次需要,耗时较长) cppman -c 使用 # 查询标准库组件 cppman cout cppman vector cppman string cppman iterator # 查看 STL 算法 cppman sort cppman find_if # 更新缓存 cppman -u 为什么推荐 直接按名称查询:不用记 std:: 前缀,cppman cout 即可 格式统一:和 man 命令一样的阅读体验 离线可用:缓存后无需联网

2015年3月17日 · 1 分钟 · Jid

VMware Workstation 最小化到系统托盘

问题 VMware Workstation 最小化后仍然占据任务栏位置,无法像 VirtualBox 那样最小化到系统托盘。 解决方案 使用 Trayconizer 这个小工具(仅 4KB),可以让任何程序最小化到托盘。 步骤 下载 Trayconizer(选择 Unicode 版本) 将 Trayconizer.exe 放到 C:\Windows\ 目录下(方便任何位置调用) 修改 VMware 快捷方式的目标为: C:\Windows\Trayconizer.exe "C:\Program Files\VMware\VMware Workstation\vmware.exe" 注意:Trayconizer.exe 和后面的路径之间有一个空格。 用修改后的快捷方式启动 VMware,最小化时就会自动收入托盘。 通用性 此方法不限于 VMware,任何 Windows 程序都可以用同样的方式最小化到托盘: C:\Windows\Trayconizer.exe "目标程序的完整路径"

2015年1月11日 · 1 分钟 · Jid

Vim7.4.253安装包

最新打包 这里是本人最新打包的gVim(7.4.253),同时开启了LUA、Perl、TCL和Python等脚本支持,并且可以在32位和64位机器上使用。 如果你准备使用Vim插件neocomplete或YouCompleteMe,那么你来对了,这个安装包就是为了这个目的准备的。 下载链接 下载地址:百度云 使用方法 下载安装gVim7.4.253.exe 为了能够在Vim中使用LUA、Python等脚本,需要把压缩包内相应的DLL复制到你的安装目录下 对于x64位系统需要注意: **为了能在鼠标右键菜单中使用Edit with Vim等命令,必须把我的x64目录下的gvimExt.dll复制到安装目录下(这个过程可能需要重启一下电脑)** Enjoy Vimming…

2014年5月16日 · 1 分钟 · Jid