围绕"?"使用的混淆,因为没有假设值

Confusion surrounding the use of "?", as no value is assumed

本文关键字:因为 假设 围绕      更新时间:2023-10-16
std::string qfunc(unsigned int n, unsigned int base) 
{
std::string s; 
do
{
unsigned int digit = n % base;
s += digit < 10 ? '0' + digit :'a' + digit - 10;
n /= base;
} while (n != 0);
...

我最近开始熟悉"condition ? if_true : if_false"论点,然而,我被if_trueif_false语句弄糊涂了。在条件有效之前,我们究竟将哪个变量设置为'0' + digit'a' + digit - 10

目前,'0' + digit'a' + digit - 10不是简单地与代码中的任何变量都没有关系的语句吗?

如果有人能澄清这个话题,我将不胜感激。

在条件有效之前,我们究竟将哪个变量设置为"0"+数字或"a"+数字-10?

简化

s += digit < 10 ? '0' + digit :'a' + digit - 10;

char temp = (digit < 10) ? ('0' + digit) : ('a' + digit - 10);
s += temp;

该行将与该数字对应的字符添加到s。如果数字的数值小于10,则对应的字符为0-9。如果数字的数值大于或等于10(可能小于16(,则对应的字符将为a-f。然而,该代码很乐意使用大于或等于16的数字值。在这种情况下,字符g及以上将添加到s中。

三元运算符测试表达式(在您的情况下为数字<10(,如果为true,则返回if_true,如果为false,则返回if _false。

从你的例子来看:

s += digit < 10 ? '0' + digit :'a' + digit - 10

也可以写成:

if (digit < 10) {
s += '0' + digit;
} else {
s += 'a' + digit - 10;
}

用简单的if语句替换条件运算符可能会有所帮助:

digit = n%b;
if (digit < 10){
s += '0' + digit;
} else {
s += 'a' + digit - 10;
}

在第一种情况下,如果digit介于0和9之间(包括0和9(,则字符串s具有从'0''9'的相应字符。在第二种情况下,如果digit大于或等于10,则使用相应的字母字符。总体而言,假设基数小于或等于36:,则执行以下映射

  • 0:'0'
  • 1:'1'
  • 9:'9'
  • 10:'a'
  • 11:'b'
  • 35:'z'
相关文章: