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

2024-05-03 00:04

本文主要是介绍【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

这篇关于【C语言笔记】【有点逗系列】 一个打印 Hello, world! 的程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/955422

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0