【C语言笔记】【有点逗系列】 一个打印 Hello, world! 的程序

【C语言笔记】【有点逗系列】 一个打印 Hello, world! 的程序

有点逗系列内容。用于记录各式各样有点逗甚至没有什么用的C语言用法☺。

功能说明

在网上看到了一个表面上很混乱但是实则没什么用处的打印 Hello, world! 的程序。

程序如下:

    main(){int i,n[]={(((1<<1)<<(1<<1)<<(1<<1)<<(1<<(1>>1)))+((1<<1)<<(1<<1))), (((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<1))+((1<<1)<<(1<<(1>>1)))+ (1<<(1>>1))),(((1<<1)<<(1<<1)<<(1<<1)<< (1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))- ((1<<1)<<(1<<(1>>1)))),(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))-((1<<1)<<(1<<(1>>1)))),(((1<<1)<< (1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))-(1<<(1>>1))),(((1<<1)<<(1<<1)<<(1<<1))+((1<<1)<<(1<<1)<<(1<<(1>>1)))-((1<<1)<<(1<<(1>>1)))),((1<<1)<< (1<<1)<<(1<<1)),(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1))-(1<<(1>>1))),(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<< (1<<1)<<(1<<(1>>1)))-(1<<(1>>1))), (((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))- ((1<<1)<< (1<<1)<<(1<<(1>>1)))+(1<<1)), (((1<<1)<< (1<<1)<<(1<<1)<< (1<<1))-((1<<1)<< (1<<1)<<(1<<(1>>1)))-((1<<1) <<(1<< (1>>1)))),(((1<<1)<< (1<<1)<<(1<<1)<< (1<<1))- ((1<<1)<<(1<<1)<<(1<<1))+((1<<1)<< (1<<(1>>1)))), (((1<<1)<<(1<<1) <<(1<<1))+(1<<(1>>1))),(((1<<1)<<(1<<1))+((1<<1)<< (1<<(1>>1))) + (1<< (1>>1)))}; for(i=(1>>1);i<(((1<<1) <<(1<<1))+((1 <<1)<< (1<<(1>>1))) + (1<<1)); i++) printf("%c",n[i]); }

这个程序表面上完全不知道在做什么,但实际上就是利用位运算和数组,将字符串 “Hello, World!” 压缩成了一系列整数,最后再打印出来。

将代码编译运行后的结果如下:

Hello, world!

我们来把上面的代码重新格式化过后,再加上详细注释,变成如下代码:

#include <stdio.h>int main() {int i;int n[] = {(((1<<1)<<(1<<1)<<(1<<1)<<(1<<(1>>1)))+((1<<1)<<(1<<1))),                                       // H(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<1))+((1<<1)<<(1<<(1>>1)))+(1<<(1>>1))),  // e(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))-((1<<1)<<(1<<(1>>1)))),         // l(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))-((1<<1)<<(1<<(1>>1)))),         // l(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))-(1<<(1>>1))),                   // o(((1<<1)<<(1<<1)<<(1<<1))+((1<<1)<<(1<<1)<<(1<<(1>>1)))-((1<<1)<<(1<<(1>>1)))),                 // ,((1<<1)<<(1<<1)<<(1<<1)),                                                                       //  (((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1))-(1<<(1>>1))),                                // w(((1<< 1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))-(1<<(1>>1))),                  // o(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))- ((1<<1)<<(1<<1)<<(1<<(1>>1)))+(1<<1)),                       // r(((1<<1)<<(1<<1)<<(1<<1)<< (1<<1))-((1<<1)<<(1<<1) <<(1<<(1>>1)))-((1<<1)<<(1<< (1>>1)))),      // l(((1<<1)<<(1<<1)<<(1<<1)<< (1<<1))- ((1<<1)<<(1<<1)<<(1<<1))+((1<<1)<< (1<<(1>>1)))),           // d(((1<<1)<<(1<<1) <<(1<<1))+(1<<(1>>1))),                                                        // !         (((1<<1)<<(1<<1))+((1<<1)<<(1<<(1>>1))) + (1<<(1>>1)))                                          // \r}; for (i = (1 >> 1); i < (((1 << 1) << (1 << 1)) + ((1 << 1) << (1 << (1 >> 1))) + (1 << 1)); i++) {printf("%c",n[i]);}return 0;
}

现在再看代码就清晰很多了,可以看出是要打印 “Hello, world!” 了。

这代码的可读性非常差,罗列紧凑的位运算难以理解,使用了不寻常的写法,利用了位运算来表示字符的ASCII码,将字符串 “Hello, World!” 压缩成了一系列整数。如果要看懂需要对C语言位运算有一定的熟练度。这代码在技术上是一个有趣的练习,可以展示对位运算和ASCII码的理解。

【参考资料】

6个变态的C语言HELLO WORLD程序

本文链接:https://blog.csdn.net/u012028275/article/details/137424102

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/831359.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发和运维同学必备的文件操作相关的bash命令

开发和运维同学必备的文件操作相关的Linux命令&#xff1a; ls&#xff1a;列出当前目录的文件和文件夹。 lscd&#xff1a;切换目录。 cd /path/to/directorypwd&#xff1a;显示当前所在目录。 pwdmkdir&#xff1a;创建新目录。 mkdir directory_namerm&#xff1a;删除文件…

vue快速入门(五十一)历史模式

注释很详细&#xff0c;直接上代码 上一篇 新增内容 历史模式配置方法 默认哈希模式&#xff0c;历史模式与哈希模式在表层的区别是是否有/#/ 其他差异暂不深究 源码 //导入所需模块 import Vue from "vue"; import VueRouter from "vue-router"; import m…

201903青少年软件编程(Python)模拟考试试卷(一级)

第 1 题 【单选题】 假设 a10, b30,那么a/b的值的的&#xff08; &#xff09; A :300 B :20 C :3 D :0.33333 正确答案:D 试题解析: 第 2 题 【单选题】 下面代码的输出结果是 print&#xff08;round(0.1 0.2,1) 0.3&#xff09; A :0 B :1 C :True D :False 正确答…

Hive 表定义主键约束

文章目录 1.建表语句2.主键约束3.主键约束的意义参考文献 1.建表语句 先看一下官方给的完整的见表语句&#xff1a; CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name -- (Note: TEMPORARY available in Hive 0.14.0 and later)[(col_name data…

关于YOLO8学习(一)环境搭建,官方检测模型部署到手机

一,环境的搭建 环境 win10 python 3.11 cmake pytorch pycharm 过程 首先安装好一个pycharm,这里就不一一叙述了。 其次,选择好一个python版本,是关键所在。有些YOLO的版本,并不支持很高的python版本,博主选用的是python3.11版本。经过实际的测试,这个版本比较合适。…

全新TOF感知RGBD相机 | 高帧率+AI,探索3D感知新境界

海康机器人在近期的机器视觉新品发布会上推出的全新TOF感知RGBD相机,无疑是对当前机器视觉技术的一次革新。这款相机不仅融合了高帧率、轻松集成、体积小巧以及供电稳定等诸多优点,更重要的是,它将AI与3D感知技术完美结合,通过高帧率+AI算法,实现了对不同场景的快速捕捉与…

电脑重装系统ip地址会变吗

在数字化世界中&#xff0c;IP地址就像是每个计算机设备的“门牌号”&#xff0c;它帮助我们在互联网上进行定位和通信。然而&#xff0c;当我们的电脑系统进行重新安装时&#xff0c;许多用户会担心其IP地址是否会发生改变。虎观代理小二将带您深入探讨电脑重装系统后IP地址的…

Android Studio报错:Constant expression required

【出现的问题】&#xff1a; 使用JDK17以上版本&#xff0c;switch语句报错&#xff1a;Constant expression required 【解决方法】&#xff1a; 在gradle.properties配置文件下添加代码&#xff1a; android.nonFinalResIdsfalse 如图&#xff1a; 接着再点击右上角的Sync…

C# 中使用 LINQ可以采取一些优化策略来提高,效率延迟加载可以使查询结果在需要时才进行计算,而不是立即计算

使用延迟加载&#xff1a;延迟加载可以使查询结果在需要时才进行计算&#xff0c;而不是立即计算。这可以减少不必要的开销。 var query collection.Where(x > x.SomeCondition).Select(x > x.SomeProperty);减少查询的数据量&#xff1a;尽量在数据库层面或者数据源层…

详解 Go 程序的启动流程,你知道 g0,m0 是什么吗?

自古应用程序均从 Hello World 开始&#xff0c;你我所写的 Go 语言亦然&#xff1a; import "fmt"func main() {fmt.Println("hello world.") }这段程序的输出结果为 hello world.&#xff0c;就是这么的简单又直接。但这时候又不禁思考了起来&#xff0…

Android Studio实现简单的自定义钟表

项目目录 一、项目概述二、开发环境三、详细设计3.1、尺寸设置3.2、绘制表盘和指针3.3、动态效果 四、运行演示五、总结展望六、源码获取 一、项目概述 在安卓开发中&#xff0c;当系统自带的View已经无法满足项目需求时&#xff0c;就要自定义View。在Android中是没有与钟表有…

chrome extension插件替换网络请求中的useragent

感觉Chrome商店中的插件不能很好的实现自己想要的效果,那么就来自己动手吧。 本文以百度为例: 一般来说网页请求如下: 当前使用的useragent是User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safar…

android studio项目实战——备忘录(附源码)

成果展示&#xff1a; 1.前期准备 &#xff08;1&#xff09;在配置文件中添加权限及启动页面顺序 ①展开工程&#xff0c;打开app下方的AndroidManifest.xml,添加权限&#xff0c;如下&#xff1a; <uses-permission android:name"android.permission.CAMERA"…

【Proteus】LED呼吸灯 直流电机调速

1.LED呼吸灯 #include <REGX51.H> sbit LEDP2^0; void delay(unsigned int t) {while(t--); } void main() {unsigned char time,i;while(1){for(time0;time<100;time){for(i0;i<20;i){LED0;delay(time);LED1;delay(100-time);}}for(time100;time>0;time--){fo…

软件工程全过程性文档(软件全套文档整理)

软件项目相关全套精华资料包获取方式①&#xff1a;进主页。 获取方式②&#xff1a;本文末个人名片直接获取。 在软件开发的全过程中&#xff0c;文档是记录项目进展、决策、设计和测试结果的重要工具。以下是一个简要的软件全过程性文档梳理清单&#xff1a; 需求分析阶段…

基于 Spring Boot 博客系统开发(五)

基于 Spring Boot 博客系统开发&#xff08;五&#xff09; 本系统是简易的个人博客系统开发&#xff0c;为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。&#x1f33f;&#x1f33f;&#x1f33f; 基于 Spring Boot 博客系统开发&#xff08;四&#xff09;&#x1f…

计算机视觉(CV)是什么以及应用场景

计算机视觉&#xff08;Computer Vision, CV&#xff09;是指计算机利用摄像机、图像传感器等设备获取图像或视频&#xff0c;并对它们进行处理和分析&#xff0c;以实现对图像或视频中的物体、场景以及其属性的理解和识别的技术领域。CV的目标是让计算机能够像人类一样“看”和…

go-mysql-transfer 同步数据到es

同步数据需要注意的事项 前提条件 1 要同步的mysql 表必须包含主键 2 mysql binlog 必须是row 模式 3 不支持程序运行过程中修改表结构 4 要赋予连接mysql 账号的权限 reload, replication super 权限 如果是root 权限则不需要 安装 go-mysql-transfer ​ git clone…

Python IDE(集成开发环境)有很多,以下是一些常用的选项

Python IDE&#xff08;集成开发环境&#xff09;有很多&#xff0c;以下是一些常用的选项&#xff1a; PyCharm&#xff1a;PyCharm被认为是普及率和使用率最高的一款Python IDE集成开发环境工具。它功能强大&#xff0c;支持多种开发模式&#xff0c;如科学计算、Web开发、数…

【leetcode】缓存淘汰策略题目总结

146. LRU 缓存 我们使用了一个双向链表cache来存储数据&#xff0c;同时使用一个哈希表hash_map来映射键和链表节点的迭代器。当调用get(key)函数时&#xff0c;我们首先检查hash_map中是否存在该key&#xff0c;如果存在则将之前位置移到链表头部并返回值&#xff1b;当调用p…