c - 如何在 C 中将 8 字节整数除以四个 2 字节十六进制?
问题描述
我有学校任务,但 IDK 如何设计代码...
它需要做的功能是,
输入 8 字节整数(我认为它必须是 unsigned long long 类型,因为输入数字必须为 0 或更多)
将输入数字分成四个 2 字节并保存每个变量。<<例如,输入数字为 18446744073709551615,则二进制为 1111111111111111111111111111111111111111111111111111111111111111。(它不必转换为二进制,只是告诉你如何划分)像这样划分 1111111111111111 / 1111111111111111 / 1111111111111111 / 1111111111111111 分为四部分>>
并将每个部分设为十六进制 <像这样,1111111111111111 / 1111111111111111 / 1111111111111111 / 1111111111111111 -> ffff / ffff / ffff / ffff>
最后,将 ffff / ffff / ffff / ffff 转换为十进制数 65535 / 65535 / 65535 / 65535
对不起,因为我的英语不好,但我需要你的帮助......;(我的水平很低,所以当你解释时,我需要一些示例代码来查看和理解。
感谢您阅读我的问题!
解决方案
假设一个字节是八位字节vulgaris,一个八字节整数就是 64 位。然后:
- 包括
<inttypes.h>
和<stdint.h>
。 x
使用uint64_t
from定义一个 64 位无符号整数变量<stdint.h>
。- 用于
scanf("%" SCNu64, &x)
从输入中读取数字。 - 测试返回值
scanf
。如果不是 1,则读取一个数字,打印错误消息并退出程序。 - 该数字的四个部分分别是位位置 0、16、32 和 48 的 16 位。右移 0、16、32
x
和 48 以将每个部分移动到低位。 - 每次移位后,提取低 16 位。您可以使用带有 16 位掩码的 AND 操作来执行此操作
0xffffu
,或者您可以通过将值分配给uint16_t
仅存储 16 位的变量来执行此操作。 - 打印数字。如果您将它们放在
uint16_t
变量中,则可以使用printf("%" PRIu16, variable);
. 如果它们在其他变量或表达式类型中,则需要不同的转换说明符,例如PRIu64
如果您有uint64_t
表达式。
推荐阅读
- php - 无法加载动态库 'zip' php - ArchLinux
- c# - 返回 0 的数据表。位置 2 处没有行 ASP.NET
- azure - Microsoft Azure 认知服务 LUIS 未显示用户在审阅端点话语中输入的内容
- javascript - 如果任何用户在页面上,则锁定表单
- ios - 如何以编程方式复制 UIView 并保存accessibilityId?
- binary - 二进制补码 VHDL
- javascript - 有没有办法让“onPress”和“onLongPress”在同一个“Button/TouchableOpacity”上
- python - 跳过所有包含字符串的行,只保留带有浮点数的行
- google-chrome-extension - 如何使用 chrome.identity.launchWebAuthFlow 缓存身份验证令牌?
- cobol - 日期整数、命令窗口、库