【问题标题】:Why does subtraction of smaller character with greater character give a big positive integer instead of a negative integer? [closed]为什么用更大的字符减去较小的字符会给出一个大的正整数而不是一个负整数? [关闭]
【发布时间】:2019-06-04 11:37:05
【问题描述】:

当我用一个较小的字符减去一个较大的字符时,我得到一个巨大的正数,而不是一个小得多的负数,同时将它分配给一个 long long int 变量。

如果我用“A”减去“N”,并且给它分配一个 long long int 变量,结果是 18446744073709551605 而不是 -13。

当我在计算时使用 abs() 函数时,我得到了正确的值,但显然它将是正数而不是负数。那么如何正确获取值呢?

char s[] = "ABCT";
char t[] = "PBDI";
long long int curr_diff;
for(int i=0; i<4; i++){
curr_diff = (t[i] - '0') - (s[i] - '0');
printf("Current value : %llu\n", curr_diff);
}

我的代码的结果

Current value : 15
Current value : 0
Current value : 1
Current value : 18446744073709551605

预期结果

Current value : 15
Current value : 0
Current value : 1
Current value : -11

【问题讨论】:

标签: c char ascii


【解决方案1】:

printf("Current value : %llu\n", curr_diff);

您正在打印long long unsigned 值。使用%lld 得到正确的输出

【讨论】:

  • 消除使用错误格式字符串的风险是使用std::cout 而不是printf 的一个很好的理由,因为它是类型安全的。
  • 为了清楚起见重新措辞:OP 正在尝试使用用于 unsigned long long int 的说明符打印 long long int。程序的行为未定义。
猜你喜欢
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
相关资源
最近更新 更多