草庐IT

c++ - 四舍五入正数或负数

我需要对一个数字进行四舍五入,但我不知道该数字是负数还是正数。是否有更好的方法来舍入foo来做到这一点:static_cast(foo>0?foo+0.5:foo-0.5)基本上我想要这种行为:3.4=>33.5=>4-3.4=>-3-3.5=>-4 最佳答案 对于C++,有一个:std::lround 关于c++-四舍五入正数或负数,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions

C++ 赋值运算符和重载

我想知道为什么下面的代码可以编译成功。#include#includeusingnamespacestd;classInteger{private:inti;public:Integer(intvalue):i(value){}//unaryorbinaryconstIntegeroperator+(constInteger&rv){cout我不明白为什么d=8是可能的。d是用户定义的类型。我没有为Integer类重载赋值运算符。是否有默认的重载运算符? 最佳答案 您还没有声明Integer构造函数explicit,因此它充当从in

C++:将 unsigned long long int 转换为 vector<char> ,反之亦然

谁能告诉我如何将unsignedlonglongint转换为vector,反之亦然。为了将unsignedlonglongint转换为vector,我尝试了以下操作:unsignedlonglongintx;vectorbuf(sizeof(x));memcpy(&buf[0],&x,sizeof(x));当我测试x=1234567890时,它失败了。但是当我尝试使用较小的x值(比如1-100)时,它起作用了……为了将vector转换为unsignedlonglongint,我使用了:unsignedlonglongint=(unsignedlonglongint)buf[0];谁能告

c++ - 字符是否在 C 表达式中自动提升?

我对我的一位同事发表了声明,内容是:"charsareautomaticallypromotedtointegersinCexpressions,andthat'sfineforperformancesinceCPUsworkfastestwiththeirnaturalwordsize.我相信由于字符的等级,字符提升行为已在标准中的某处说明。这是我得到的回复:"Charactersarenotdefaultpromotedtoaninteger.Theregistersizeis32bit,butmultiplebytevaluesinarowcanbepackedintoasing

c++ - 如何有效地检测 4 个整数变量的对称性?

我想在4个整数变量i,j,k和l中找到对称性。对称性是:所有四个数字都相等:XXXX,三个数字相等:XXXY,XXYX,XYXX,YXXX两对相等的数字:XXYY,XYXY,XYYX,...一对相等的数字和两个不同的数字:XXYZ,XYXZ,XYZX,...所有数字都不同。所有变量都在某个非连续范围内运行。我使用嵌套的ifelse语句。第一个if检查所有变量的不平等。如果不是,那么我有情况1。下一个if检查是否有任何相等的对。如果不是,则情况5。下一个if检查三个相等的数字。如果为真,则情况2。否则,最后一个if检查两对相等的数字。如果为真,则情况3,否则情况4。if(!(i==j&&

c++ - C/C++ : Converting hexadecimal value in char to integer

我将十六进制值存储为字符:charA='0';charB='6';charC='E';...我需要将它们转换为整数。我知道'atoi',但这只适用于十进制编码的字符值。有类似的功能吗? 最佳答案 intv=(A>'9')?(A&~0x20)-'A'+10:(A-'0');对于ASCII是正确的。对于其他字符集,类似的方法也行得通,但您需要使用toupper而不是&~0x20。 关于c++-C/C++:Convertinghexadecimalvalueinchartointeger,我们

c++ - 如何过滤 std::integer_sequence

如果我理论上有一个整数序列,比如std::integer_sequence我如何使用一些编译时谓词过滤它以获得可能更小的std::integer_sequence?为了论证,假设我只想要偶数值,这导致了“我怎样才能使以下static_assert(或接近的东西)通过?”的问题static_assert(std::is_same_v,decltype(FilterEvens(std::integer_sequence{}))>,"Integersequencesshouldbeequal");这个问题的灵感来自于思考我们如何完成删除两个位集(thisquestion)之间的重复项,假设我

c++ - 制作一个不断变化的随机整数?

如何创建一个不断变化的伪随机整数?这样,我可以输入:cout程序会返回如下内容:45.7564.891.64(我不确定这是否有意义。) 最佳答案 创建一个表示随机数的类:classRandom{};然后重载operator:std::ostream&operator用作:intmain(){Randomrandom;std::cout显然,您需要实现generate_random. 关于c++-制作一个不断变化的随机整数?,我们在StackOverflow上找到一个类似的问题:

c++ - C/C++ : how to get integer unix timestamp of build time (not string)

我正在尝试实现非常微不足道的事情:我需要存储构建时间的整数32位unix时间戳,但是我找到的所有宏(__DATE__,__TIME__,__TIMESTAMP__)扩展为字符串,而不是整数。看来,我们只是没有它(这对我来说很奇怪)。我真的想要整数,而不是字符串。获得它的最佳做法是什么?更新:附带说明:我做嵌入式的东西,所以我没有足够的资源(比如128KB的闪存),因此解析字符串真的是个坏主意。我为什么需要它:我只需要每个Beta版本都有唯一的版本号。首先,hex文件将被命名为my-firmware-v2-33-BETA-1397315745.hex,其次,当我需要在设备屏幕上显示当前版

c++ - 从内置类型到自定义类的转换

我有一个名为Integer的自定义类,它充当int,我想告诉编译器如何自动将某些类型转换为Integer,这样我就可以避免一遍又一遍地输入相同的东西,someCall(Integer(1),Integer(2));会变成someCall(1,2);我已经用谷歌搜索了,但我能找到的只是做相反的事情,将Integer转换为int我想完成相反的事情。 最佳答案 编写一个接受int的构造函数,如:classInteger{public:Integer(int);};如果Integer类有这个构造函数,那么你可以这样做:voidf(Integ