相关疑难解决方法(0)

C和C++是否保证[af]和[AF]字符的ASCII?

我正在查看以下代码来测试十六进制数字并将其转换为整数.代码有点聪明,因为它利用大写字母和低位字母之间的差异是32,而那是第5位.所以代码执行一个额外的OR,但保存一个JMP和两个CMPs.

static const int BIT_FIVE = (1 << 5);
static const char str[] = "0123456789ABCDEFabcdef";

for (unsigned int i = 0; i < COUNTOF(str); i++)
{
    int digit, ch = str[i];

    if (ch >= '0' && ch <= '9')
        digit = ch - '0';
    else if ((ch |= BIT_FIVE) >= 'a' && ch <= 'f')
        digit = ch - 'a' + 10;
    ...
}
Run Code Online (Sandbox Code Playgroud)

C和C++是否保证[af]和[AF]字符的ASCII或值?这里,保证意味着上下字符集总是相差一个常数值,可以用一个位表示(对于上面的技巧).如果没有,标准对他们说了什么?

(对不起C和C++标签.我对两种语言在这个问题上的立场感兴趣).

c c++ ascii

24
推荐指数
3
解决办法
2890
查看次数

为什么在C中减去'0'会导致char表示的数字?

有人可以解释为什么这有效吗?

char c = '9';
int x = (int)(c - '0');
Run Code Online (Sandbox Code Playgroud)

为什么从char的ascii代码中减去'0'会导致char表示的数字?

c c++

22
推荐指数
4
解决办法
2万
查看次数

什么做putchar('0'+ num); 做?

我试图了解它是如何putchar('0' + r);工作的.下面,该函数采用整数并将其转换为二进制.

void to_binary(unsigned long n)
{
   int r;
   r = n % 2;
   if (n >= 2)
      to_binary(n / 2);
   putchar('0' + r);
}
Run Code Online (Sandbox Code Playgroud)

我谷歌putchar的定义,但我没有找到这个.为了测试它,我添加了一个printf来查看r的值:

void to_binary(unsigned long n)
{
   int r;
   r = n % 2;
   if (n >= 2)
      to_binary(n / 2);
   printf("r = %d and putchar printed ", r);
   putchar('0' + r);
   printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

然后我运行它(键入5)并获得此输出:

r = 1并且putchar打印1
r = 0并且putchar打印0
r = 1并且putchar打印1

所以我认为putchar('0' + r); 如果r = 0 …

c putchar

8
推荐指数
1
解决办法
3491
查看次数

字符集的字符集是否保证为ASCII?

这里开始的讨论开始,标准是否为字符指定了值?那么,'0'保证是48?这就是ASCII告诉我们的,但它有保证吗?如果没有,你看到任何编译器'0'不是48?

c++ standards ascii

7
推荐指数
2
解决办法
836
查看次数

在c ++中将数字char转换为int(与char相同)

我有一个char数组,所有数组都是数字,但Char类型意味着:

myArray = ['5','6','8','9','10',....]
Run Code Online (Sandbox Code Playgroud)

例如,我想添加其中两个.我必须将它们转换为整数,然后将它们添加到一起,但使用:

(int)myArray[1]+(int)myArray[2]
Run Code Online (Sandbox Code Playgroud)

给出错误的答案.这样做的功能或正确方法是什么?

c++

1
推荐指数
1
解决办法
181
查看次数

标签 统计

c++ ×4

c ×3

ascii ×2

putchar ×1

standards ×1