如何使用链表将负十进制数转换为二进制?

How to convert a negative decimal number to binary using linked list?

本文关键字:转换 二进制 十进制数 何使用 链表      更新时间:2023-10-16

我想使用 2 的补码将负数转换为二进制,但我无法为其提供正确的逻辑。如何使用链表将负十进制数转换为二进制?

我的一个朋友说这是签名位或类似问题

我是初学者,找不到解决方案。我已经搜索了所有网络,但一无所获。

struct node {
long data;
node* next;
}* head,* tail;
int main(int argc, char** argv) {
head = NULL;
tail = NULL;
long dec;
cout << "Enter the decimal number" << endl;
cin >> dec;
div(dec);
dis();
singlecomp();
dis();
return 0;
}
void div(long num) {
while (num != 0) {
createNode(num % 2);
num /= 2;
}
}
void createNode(long val) {
node* temp = new node;
temp->data = val;
temp->next = NULL;
if (head == NULL) {
head = tail = temp;
} else {
temp->next = head;
head = temp;
}
}
void dis() {
node* cur = new node;
cur = head;
while (cur != NULL) {
cout << cur->data << " ";
cur = cur->next;
}
}
void singlecomp() {
node* now = new node;
now = head;
cout << endl;
while (now != NULL) {
if (now->data == 0) {
now->data = 1;
} else {
now->data = 0;
}
now = now->next;
}
}
  1. 从 C++11 开始,负值的除法被指定为向零截断。在此之前,舍入的方向是实现定义的,理论上你的代码在某些平台上可能会导致无限循环。

  2. 对于当前的行为标准,C++允许负数的 3 种表示:

    • 符号量级
    • 一个人的补语
    • 二的补码

你的代码实现了 one 的补码,而绝大多数计算平台(几乎我所知道的(都使用 two 的补码。

  1. C++长型类型通常为 32 位或 64 位。您需要向补充值添加足够的前导值,以填充当前算法未填充的位,因为它在达到值 0 时停止,而不是枚举所有 32 或 64 位。

  2. 在给定平台上生成有符号长整型的二进制表示的最简单方法是先将其转换为无符号长整型,然后在无符号值上使用除法/余数(或移位/按位-和(。