gpt4 book ai didi

c - 逐位打印整数

转载 作者:行者123 更新时间:2023-12-02 01:09:33 25 4
gpt4 key购买 nike

我有一个函数 print_number。

该函数检查数字前面是否存在'-',然后将数字取反并取出每个数字并打印出来。该算法运行良好,但如果我给出 -2.147.483.648(这应该是整数的下限)它会打印 -0,我不知道为什么。

#include<stdio.h>

void print_char(char character)
{
printf("%c",character);
}

void print_number(int nr)
{

int reverse=0;

if (nr < 0)
{
print_char('-');
nr *= -1;
}

while(nr > 9)
{
reverse = reverse * 10 + nr % 10;
nr = nr / 10;
}
print_char(nr + '0');

while(reverse)
{
print_char(reverse % 10 + '0');
reverse = reverse / 10;
}
}

最佳答案

当你在做的时候

if (nr < 0)
{
print_char('-');
nr *= -1;
}

它将负数反转为正数。如果您为 -2.147.483.648 运行它,您将收到

nr = 2.147.483.648 // == binary 1 0000000000000000000000000000000

由于 INT 在您的体系结构中是 32 位变量(规范至少是 16 位变量),因此“1”会溢出它,依此类推

nr = 0 // For gcc-like C realisation

并且接受 ISO9899 规范,signed int 溢出的这种行为是实现指定的事情,可能无法共同预测。

如果您需要将程序用于更大的值,请使用 long long 值。像这样的东西:

#include<stdio.h>

void print_char(char character)
{
printf("%c",character);
}

void print_number(long long nr)
{
int reverse=0;

if (nr < 0)
{
print_char('-');
nr *= -1;
}

while(nr > 9)
{
reverse = reverse * 10 + nr % 10;
nr = nr / 10;
}
print_char(nr + '0');

while(reverse)
{
print_char(reverse % 10 + '0');
reverse = reverse / 10;
}
}

void main(void){
print_number(-2147483648LL);
}

并测试:

> gcc test.c
> ./a.out
-2147483648

关于c - 逐位打印整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45661322/

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