有可能将多个整数赋值为一吗
Is it possible to assign multiple integers into one?
假设我有
int a = 3;
int b = 4;
int c = 6;
如何做类似的事情:
int d = a,b,c;
得到d = 346;
我只需要将正确序列中的值存储在另一个整数中。
我试过了:d = a,b,c
但它表明:
Error: 'int b': redefinition and 'int c' : redefinition
有很多方法,但不是像您尝试的那样。您可以在新的int:中将每个值分配到自己的字节中
int d = a << 16 | b << 8 | c;
std::cout << std::hex << std::setw(6) << d << std::endl; // prints 030406
或者使用半字节而不是字节:
int d = a << 8| b << 4 | c;
std::cout << std::hex << d << std::endl; // prints 346
如果你想组合单个十进制数字,你可以做:
int d = a * 100 + b * 10 + c;
std::cout << d << std::endl; // prints 346
最后,您需要更精确地指定您希望如何组合这些值(也包括如何再次分离它们…)
您还需要指定如何处理不适合目标的值(例如a = b = c = 1 << 16;
)–如果你只声明这些值是非法的;换句话说:您可以指定a、b和c的有效范围。顺便说一句:如果这些范围是非负的,请考虑使用unsigned int
。
编辑以回应评论:
当您尝试组合日期值(天、月、年)时:将它们组合在一个结构中要容易得多:
struct Date
{
uint16_t year; // maybe int16_t instead, if you want to represent years BC, too
uint8_t month;
uint8_t day;
};
提供了32位int
,此结构也不会更小–16位的int
无论如何都无法保存完整的日期(除非您删除一些信息)。。。
这是一个对数字执行的非常奇怪的操作,我看不出这样做的原因。如果你真的需要它,你可能应该使用字符串:
int a = 3;
int b = 4;
int c = 6;
std::string result = std::to_string(a) + std::to_string(b) + std::to_string(c);
std::cout << result << "n";
如果您需要返回数值,可以使用std::stoi()
或等效值。如果数字不符合整数类型,它将抛出异常:
int d = std::stoi(result);
您可以使用std::stringstream
#include <iostream>
#include <sstream>
#include <string>
int main()
{
int a = 3;
int b = 4;
int c = 6;
int d;
std::stringstream str;
str<<a<<b<<c;
str>>d;
std::cout<<"d="<<d<<std::endl;
}
结果:
d=346
您缺少的概念:
对于lvalue(在您的情况下是赋值初始化的左侧)声明,您可以在一行上创建多个int变量:
int a, b, c, d;
然而,对于初始化,只有一个右值可以对应于单个int变量:
int a = 1, b, c = 5, d;
对实际问题的回答:
我真的很喜欢阿空加瓜的解决方案:(然而,在一些机器上,尤其是旧机器上,int保证是16位,而不是32位,所以我用以下方式修改了它,使其更便携)
long d = a | b << 8 | c << 16;
在这种情况下,考虑到您的long至少有32位表示,当您管道传输它们时,a使用第一个字节(8位)表示,b使用第二个字节表示,c使用第三个字节表示。这就像添加字节表示来为新的long创建新的字节表示一样。
- 为"adjacent"变量赋值时出现问题
- C++中的赋值发生,尽管右侧出现异常
- 用C++中的sscanf赋值
- 为std::string的某个索引赋值
- 重载Singly Linked List中的赋值运算符
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- gtest_使用setargpointee在函数中赋值
- 非常量变量只读位置的赋值
- 字符串 c++ 的不明确整数赋值
- 有可能将多个整数赋值为一吗
- gcc 的 -Wconversion 是否与使用比 int 短的整数类型的复合赋值(+= 等)不兼容?
- 在sparcsolaris上使用gcc为长整型整数赋值
- 可以将lower_bound(来自c++ STL)的结果赋值给整数类型变量吗?
- 如何将多个整数赋值给另一个整数
- 为什么我必须将地址强制转换为整数以使其可赋值?
- 整数变量的值被神秘地重新赋值
- 如果我将带小数点的数字赋值给整数而不是浮点数会发生什么?
- 无法为整数类型的变量赋值
- 将函数的声明设置为0是什么意思?如何将整数赋值给函数?
- 将较小的整数类型赋值给较大的整数类型是否不安全?