围绕"?"使用的混淆,因为没有假设值
Confusion surrounding the use of "?", as no value is assumed
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_true
和if_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'
相关文章:
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 程序无法启动,因为缺少 libmpc-3.dll
- 数组类型 int[n][n] 不可赋值,因为表达式必须具有常量值
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 无法为 X.radio 创建中等可视化,因为找不到网络节点可视化 - Omnet++
- 在编译时,C++项目抛出错误 C2228,这是预期的,因为控件在运行时未达到该点
- C++ 程序不会因为内存而终止
- 为什么 GCC 不能假设 std::vector::size 在这个循环中不会改变?
- 这个方程 x + y = x & y + x |y 成立(假设 x, y > 0)?
- 为什么"fun(i)"被推导出为"fun<int&>"而不是"fun<int>",因为"i"是"int"的类型而不是参考?
- 将公共递归转换为尾递归,因为大型输入的堆栈溢出
- 无法使用 openssl 服务器,因为密码已过时...什么的...ERR_SSL_VERSION_OR_CIPHER_MISMATCH
- "this"关键字在C++中的实现限制,因为它与危险但功能示例有关
- 系统错误:程序无法启动,因为您的计算机中缺少MSVCP140D.DLL。尝试重新安装该程序以解决此问题
- 如何读取指针的值,因为这个指针是函数的返回?
- 无法加载 QML 插件:无法保护模块,因为它从未注册过
- 无法使用犰狳运行编译的 cpp 代码,因为 dyld:库未加载
- system() 无法运行我的程序,因为空间
- 围绕"?"使用的混淆,因为没有假设值