草庐IT

符号化

全部标签

c++ - 使用 boost::program_options 禁止无符号值的负参数

假设我有一个程序使用boost::program_options来解析命令行参数,其中一个有一个unsigned值:#include#includenamespacepo=boost::program_options;intmain(intargc,char*argv[]){unsignednum;po::options_descriptiondesc;desc.add_options()("num,n",po::value(&num),"Non-negativenumber");po::variables_mapvm;po::store(po::parse_command_line(

c++ - 字节设置一个无符号短

我正在尝试使用memset单独设置无符号短变量中的字节:#include#includeintmain(){unsignedshorttest2;//2bytesstd::cout我得到的输出是:sizeoftest2:2value:7777是0x4D。所以出于某种原因,它没有获取我试图在变量的第二个字节上设置的0x42。这是为什么? 最佳答案 &test2+1实际上会将地址推进sizeof(test2),即2,并将指针移到范围之外。尝试转换为char*:#include#includeintmain(){unsignedshort

c++ - 由于使用声明导致字节和歧义符号?

我们是一个C++库。多年来,我们在全局命名空间中使用typedefunsignedcharbyte;。用户程序和其他库提供了byte的兼容定义,因此没有问题。C++17添加了std::byte并改变了字节的语义。现在我们需要通过避免全局namespace污染来更加卫生;我们需要将自己与std::byte隔离开来。我们的更改是将我们的byte移到我们的命名空间中。在测试更改的影响时,我们目睹了意外的失败。下面的程序没有遵循最佳实践(根据HerbSutter在MigratingtoNamespaces的说法),但我们希望它成为的典型用例用户程序。$cattest2.cxx#include"

c++ - NEON 向量化无符号字节乘积和 : (a[i]-int1) * (b[i]-int2)

我需要改进一个循环,因为它被我的应用程序调用了数千次。我想我需要用Neon来做,但我不知道从哪里开始。假设/先决条件:w始终为320(16/32的倍数)。pa和pb是16字节对齐的ma和mb为正数。intwhileInstruction(constunsignedchar*pa,constunsignedchar*pb,intma,intmb,intw){intsum=0;do{sum+=((*pa++)-ma)*((*pb++)-mb);}while(--w);returnsum;}这种对其进行矢量化的尝试效果不佳,而且不安全(缺少破坏者),但展示了我正在尝试做的事情:intwhil

C++:错误 LNK2019:函数 _main 中引用了未解析的外部符号

我有一些C++代码。鸟.hclassBird{std::strings;staticinti;public:Bird();~Bird();friendstd::ostream&operator鸟.cpp#include#include#include"Bird.h"Bird::Bird(){++i;std::stringstreamss;ssmain.cpp#include#include#include"Bird.h"intBird::i=0;intmain(){Birdb();std::cout我收到以下错误:Main.obj:errorLNK2019:unresolvedexte

c++ - 其他等效的有符号和无符号类型的别名

C和C++标准都允许相同整数类型的有符号和无符号变体相互使用别名。例如,unsignedint*和int*可能是别名。但这还不是全部,因为它们显然具有不同范围的可表示值。我有以下假设:如果通过int*读取一个unsignedint,该值必须在int范围内,否则会发生整数溢出并且行为未定义。这是正确的吗?如果通过unsignedint*读取int,则负值环绕,就好像它们被强制转换为unsignedint一样。这是正确的吗?如果该值在int和unsignedint范围内,则通过任一类型的指针访问它都是完全定义的并给出相同的值。这是正确的吗?此外,兼容但不等价的整数类型呢?在int和long

c++ - 适合无符号(自然)数的任何值的宽度

背景我有一个日志系统,可以将记录输出到std::ostream.每条记录都用一个计数器进行注释,该计数器随着每个输出而增加1,如下所示:=====Batch#5=====Thisisthefifthrecord=====Batch#19=====Thisisthenineteenthrecord=====Batch#187=====Whoknowstospell*that*?计数器是std::size_t,即无符号整数。问题就像现在一样,输出的数字没有任何填充,看起来很难看。我想实现这一目标:=====Batch#5=====Thisisthefifthrecord=====Batch

C++ 无限符号

您好,我只是想知道如何在C++中显示无穷大(∞)?我正在使用代码块。我阅读了几个关于这个主题的问答,但我是这方面的新手,尤其是十六进制编码和其他东西。我必须包括什么以及我要准确输入什么。如果有人可以编写代码并解释它,那就太好了!谢谢! 最佳答案 符号不是ASCIIcode的一部分.但是,在代码页437中(大多数情况下,Windows命令提示符中的默认设置为英语区域设置/美国区域设置)它表示为字符#236。所以原则上std::cout(236);应该显示它,但结果取决于当前的语言环境/编码。在我的Mac(OSX)上,它显示不正确。最好

c++ - 有符号和无符号整数表达式与 0x80000000 之间的比较

我有以下代码:#includeusingnamespacestd;intmain(){inta=0x80000000;if(a==0x80000000)a=42;cout输出是HelloWorld!::42所以比较有效。但是编译器告诉我g++-c-pipe-g-Wall-W-fPIE-I../untitled-I.-I../bin/Qt/5.4/gcc_64/mkspecs/linux-g++-omain.o../untitled/main.cpp../untitled/main.cpp:Infunction'intmain()':../untitled/main.cpp:8:13:w

c++ - *(ptr)[j++] 的替代符号?

在将双指针传递给函数时,我在函数中使用了符号*ptr[j++],这导致程序崩溃。我猜它是由于运算符优先级而发生的,所以我通过编写(*ptr)[j++]来纠正它,但我不喜欢这种表示法。感觉又长又乱。我也知道符号ptr[0][j++]但我也不喜欢它。有没有更好的符号或方法来解决所有这些问题?我的代码:#includeusingnamespacestd;voidmset(int**ptr,size_tsize);voidmain(void){constsize_tsize=10;int*ptr=newint[size];mset(&ptr,size);for(size_tn=0;nP.S我知