gpt4 book ai didi

c - 如何在不使用 c 中的算术的情况下将整数拆分为字节?

转载 作者:太空宇宙 更新时间:2023-11-04 03:39:15 25 4
gpt4 key购买 nike

我正在用 C 实现四个基本算术函数(加、减、除、乘)。

我想象的这些函数的基本结构是

程序由用户使用scanf获取两个操作数,

然后程序将这些值拆分为字节并计算!

我已经完成了加减法,

但是我忘了我不应该使用算术函数,

所以当将整数拆分为单个字节时,

我写的代码是这样的

    while(quotient!=0){
bin[i]=quotient%2;
quotient=quotient/2;
i++;
}

但是因为有些算术函数我不应该使用..

所以我必须重写拆分部分,

但我真的不知道如何在不使用的情况下将整数拆分为单个字节% 或/.

最佳答案

要访问变量的字节,可以使用类型双关
根据标准 C(C99 和 C11),只有 unsigned char 才能确保以安全的方式执行此操作。

这可以通过以下方式完成:

typedef unsigned int myint_t;
myint_t x = 1234;
union {
myint_t val;
unsigned char byte[sizeof(myint_t)];
} u;

现在,您当然可以通过这种方式访问​​ x 的字节:

u.val = x;
for (int j = 0; j < sizeof(myint_t); j++)
printf("%d ",u.byte[j]);

但是,正如 WhozCrag 指出的那样,字节顺序存在问题。
不能假设字节是确定的顺序。
因此,在使用字节进行任何计算之前,您的程序需要检查字节序是如何工作的。

#include <limits.h> /* To use UCHAR_MAX */

unsigned long int ByteFactor = 1u + UCHAR_MAX; /* 256 almost everywhere */
u.val = 0;

for (int j = sizeof(myint_t) - 1; j >= 0 ; j--)
u.val = u.val * ByteFactor + j;

现在,当您打印 u.byte[] 的值时,您将看到字节为 myint_t 类型排列的顺序。较低有效字节的值为 0。

关于c - 如何在不使用 c 中的算术的情况下将整数拆分为字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29999799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com