C 中混合使用“switch”和“while”

2023-11-24

我最近读过这一页关于奇怪的 C 片段代码。其中大多数是可以理解的。但我无法理解这一点:

switch(c & 3) while((c -= 4) >= 0){
    foo(); case 3:
    foo(); case 2:
    foo(); case 1:
    foo(); case 0:
}

谁能帮我看看这段代码背后的逻辑是什么?它是如何运作的?


达夫的设备注释应该足以很好地解释背景,所以我将尝试解释这个案例:

switch 检查 c 的最后 2 位,并跳转到 while 循环内相应的 case 语句。 case 语句下面的代码也会被执行。然后控制到达 while 循环的末尾,因此它再次跳转到开头以检查条件是否仍然为真。如果是,则执行循环内的所有语句,并重复循环,直到条件为假。初始切换通常确保 while 循环第一次运行时 c 为 4 的倍数。

Edit: 维基百科上达夫的设备。添加链接以使我对“笨蛋的设备评论”的含义更加明显。如果您支持这个答案,请考虑支持 interjay 的评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 中混合使用“switch”和“while” 的相关文章

  • 无法使用 strptime() 获取秒数

    我收到 YYYY MM DDThh mm ss S Z hh mm 这种格式的日期时间 我正在尝试使用复制该值strptime如下所示 struct tm time 0 char pEnd strptime datetime Y m dT
  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • Java 中的条件数字格式

    如何在 Java 中格式化浮点数 以便仅在浮点数不为零时才显示浮点组件 例如 123 45 gt 123 45 99 0 gt 99 23 2 gt 23 2 45 0 gt 45 编辑 我忘了提及 我仍在使用 Java 1 4 抱歉 如果
  • Vista/7:如何获得玻璃颜色?

    你怎么用DwmGetColorizationColor The 文档说它返回两个值 32 位0xAARRGGBB含有用于玻璃成分的颜色 一个布尔参数 如果颜色是不透明的混合颜色 则为 true 不管什么意思 Here s a color t
  • WCF MaxReceivedMessageSize:超出最大消息大小配额

    我收到此错误 传入消息的最大消息大小配额 65536 已调整为 超过了 要增加配额 请使用 MaxReceivedMessageSize 适当的绑定元素上的属性 如何在 WCF 客户端应用程序或服务器应用程序中增加此值 如果可能 请提供如何
  • Primefaces OverlayPanel 的延迟问题 - 加载为惰性

    我正在使用 Primefaces 3 2 与 jsf 2 和 glassfish 3 1 2 我有一个包含用户头像的用户 p dataTable 每当用户将鼠标移到头像上时 就会出现 p overlayPanel 其中包含有关用户的更多信息
  • ARC 和 Storyboard 的兼容性

    考虑到设备和 iOS ARC 和 Storyboard 的兼容性如何 ARC 和 Storyboard 是否适用于 iPhone 3G 3GS 4 和 4S ARC 和 Storyboard 可以在 iOS 4 和 5 上运行吗 ARC 运
  • 如何初始化 wchar_t 变量?

    我正在看书 C 简而言之 并在阅读完本节后字符集 谈到宽字符 我写了这个程序 include
  • 使用 AJAX 刷新的页面上的 Google 加一按钮

    有谁知道 Google 加一按钮的一些代码可以在使用 AJAX 刷新的页面上运行吗 Facebook 的操作非常简单 但我在 Google 上找不到任何相关文档 Thanks 我也在寻找这个并找到了这个
  • Bitbucket:显示标记为秘密的变量的值

    对于我的一个存储库 我需要查看我为部署的安全属性设置的值 按中所述创建https support atlassian com bitbucket cloud docs variables and secrets Secured variab
  • .Net Core 依赖注入 IdbConnection

    我有一个 NET MVC 应用程序 它使用 autofac 进行依赖注入 当应用程序启动时 以下代码注册 IDbConnection var connectionString ConfigurationManager ConnectionS
  • 在真实设备上通过 USB 连接 localhost api 与 Android Studio 时出现超时错误

    我在 Window 8 1 上使用 Android Studio 版本 3 安装了 XAMPP 以在本地主机上托管 php api 我正在尝试从 Android Studio 访问 localhost api 在主机名中 我使用了 IPv4
  • Docker 运行失败,守护程序发出错误响应

    我只需运行以下命令 docker run d p 80 80 name webserver nginx 拉取所有图像后返回此错误 docker 来自守护程序的错误响应 驱动程序外部编程失败 端点网络服务器上的连接 ac5719bc0e95e
  • 如何在 SwiftUI 中的 foreach 循环中设置切换状态

    当我尝试在字典的值循环内设置显示切换时 我从错误消息中得到的帮助很少 如果我取消注释下面的 3 行注释代码 并尝试为循环中的每个属性添加切换 则会收到以下错误 无法将类型 HStack Text ConditionalContent gt
  • 部署期间 Azure 中的 Service Fabric 错误

    将集群部署到 Azure 时遇到问题 一切都在本地运行 但是当部署到 Azure 时 我在尝试调用其中一项服务时收到错误 在 Azure 中 服务结构是6 1 480 9494 并且无法升级 但我的本地版本是6 2 262 94946天前发
  • 如何去掉小数点后的零

    我正在尝试在小数点后修剪零 如下所示 但它没有给出所需的结果 trig currentVal doubleValue trig trig 100 NSNumberFormatter formatter NSNumberFormatter a
  • 使用多个 CTE

    无法弄清楚如何使用多个 CTE 这失败了 with cteOne as select 1 as col cteTwo as select 2 as col select yesA where exists select from cteOn
  • 将数据从 Textbox 插入到 Postgresql

    我刚刚学习如何连接 C 和 PostgresQL 我想将 tb1 Textbox 和 tb2 中的数据插入数据库 但我不知道如何编码 我以前的代码是从数据库中选择 这是我的代码 private void button1 Click obje
  • 如何取消 URL 会话请求

    我使用将图像转换为 base64 并将图像作为参数发送到 API 中 将多个图像上传到服务器 但是 当我们一次又一次调用 api 时 如何停止单击按钮时的 api 调用 我正在使用下面的代码来调用 API 提前致谢 let urlPath
  • Windows 上的 QtCreator 使用 CodeSourcery 工具链为 Linux ARM 进行交叉编译

    我在 Windows 7 计算机上安装了 Qt Creator 我的目标是 OMAP3 嵌入式 Linux 板 我下载了目标工具链 Sourcery G Lite for Windows 并安装了 MinGW http www mingw
  • 如何将 npm 与 node.exe 一起使用?

    我已经从 Windows 下载了 Nodejs 的二进制文件 exe 主页 我该如何安装和使用npm 节点包管理器 当前的 Windows 安装程序来自节点js org从 v0 6 11 2012 02 20 开始 NPM 将与 NodeJ
  • C 中混合使用“switch”和“while”

    我最近读过这一页关于奇怪的 C 片段代码 其中大多数是可以理解的 但我无法理解这一点 switch c 3 while c 4 gt 0 foo case 3 foo case 2 foo case 1 foo case 0 谁能帮我看看这