草庐IT

c++ - char c = 255 的值转换为 int

我的问题是关于Stroustrup的《C++编程语言》第4版一书中的一段话。他举了一个例子charc=255;//255is‘‘allones,’’hexadecimal0xFFinti=c;以及如何在char有符号或无符号的机器上转换它的解释。i的值是多少?不幸的是,答案是不确定的。在8位字节的实现中,答案取决于扩展为int时“全部”char位模式的含义。在char没有符号的机器上,答案是255。在char有符号的机器上,答案是−1。我的问题是为什么它会是-1,这不是取决于机器上使用的二进制数表示形式吗?如果它使用一个补码,它不是0(-0)吗?如果使用二进制补码,它不是-1吗?

C++如何将整数存储到二进制文件中?

我有一个包含2个整数的结构,我想将它们存储在二进制文件中并再次读取。这是我的代码:staticconstchar*ADMIN_FILE="admin.bin";structpw{inta;intb;};voidmain(){pw*p=newpw();pw*q=newpw();std::ofstreamfout(ADMIN_FILE,ios_base::out|ios_base::binary|ios_base::trunc);std::ifstreamfin(ADMIN_FILE,ios_base::in|ios_base::binary);p->a=123;p->b=321;fout

c++ - "C++ compilers use a binary object layout"这句话的含义和用途是什么

在浏览此C++常见问题解答时https://isocpp.org/wiki/faq/mixing-c-and-cpp#cpp-objs-passed-to-c我遇到了语句MostC++compilersuseabinaryobjectlayoutthatcausesthisconversiontohappenwithmultipleinheritanceand/orvirtualinheritance.我无法理解它的含义和应用。根据C++FAQ,此对象布局机制有助于C++编译器进行以下检查InC++itiseasytocheckifaDerived*calleddppointstoth

c++ - 具有一个零位的下一个更高的数字

今天遇到了这个问题,弄了一段时间也没解决。我需要一些帮助我有数字N。问题是找到下一个更高的数字(>N),二进制中只有一个零位。例子:数字1可以用二进制表示为1。下一个只有一个零位的更高数字是2-二进制10其他几个例子:N=2(10),下一个带有一个零位的更高数字是5(101)N=5(101),下一个更高的数字是6(110)N=7(111),下一个更高的数字是11(1011)200个号码列表:11210-131141005101-16110-171118100091001101010111011-1121100131101-1141110-115111116100001710001181

c++ - 为什么移动超过允许的位仍然有效?

我有一个int8_t,我想看看如果我将它左移超过8位会发生什么。所以这就是我所做的:int8_tx=1;std::cout出于某种原因,这将返回1024,就好像该类型包含足够的位来表示该数字一样。我认为当你移位超过给定的位时,你会在所有位中得到0(或导致未定义行为的有符号溢出/下溢)。此外,我运行此代码以获取最大数量的int8_t:std::numeric_limits::max();//127这种类型的最大数量是127,但向左移动它可以使它甚至比它的无符号类型更高!这怎么可能? 最佳答案 的参数正在被隐含地扩大到int,以及x的结

c++ - 按位 - 如何检查一个二进制数是否包含另一个?

A=110000000-384Blue+RedB=011000010-194Green+Black+RedA&B=C=010000000-128Red如何检查B是否包含A中的所有位以及其他位?在上述情况下,我想得到“假”。我正在使用XCode和objective-c,但据我所知这应该无关紧要 最佳答案 如果A&B(即交集)等于A,则B包含A:(a&b)==a类似于a⊆b↔(a∩b)=a来自集合论。 关于c++-按位-如何检查一个二进制数是否包含另一个?,我们在StackOverflow上

c++ - ifstream::binary 和 ios::binary 之间有区别吗?

我见过这样写的代码:ifstreamfin;fin.open("largefile.dat",ifstream::binary|ifstream::in);现在这让我感到困惑,上面的代码和下面使用ios::binary和ios::in作为替换的代码之间有什么区别吗?ifstreamfin;fin.open("largefile.dat",ios::binary|ios::in); 最佳答案 没有区别。这些名称继承自虚拟基地std::ios_base从中派生出具体的流类。 关于c++-if

c++ - 以二进制序列化和反序列化 vector

我在尝试将vector(std::vector)序列化为二进制格式然后正确反序列化并能够读取数据时遇到问题。这是我第一次使用二进制格式(我使用的是ASCII,但现在已经变得太难使用了)所以我从一个简单的整数vector开始。每当我读回数据时,vector的长度总是正确的,但数据要么是0,要么是未定义的,要么是随机的。classExample{public:std::vectorval;};写:Exampleexample=Example();example.val.push_back(10);size_tsize=sizeofBinaryExample+(sizeof(int)*exa

c++ - 使用/不使用 ios::binary 模式打开流时使用读/写的区别

在我对以下代码片段的实验中,我没有发现使用/不使用ios:binary模式创建流有什么特别的区别:intmain(){ifstreamostr("Main.cpp",ios::in|ios::binary|ios::ate);if(ostr.is_open()){intsize=ostr.tellg();char*memBlock=newchar[size+1];ostr.seekg(0,ios::beg);ostr.read(memBlock,size);memBlock[size]='\0';ofstreamfile("trip.cpp",ios::out|ios::binary)

c++ - C++中的十进制到8位二进制转换

我正在处理十进制到二进制的转换。我可以转换它们,使用字符bin_x[10];itoa(x,bin_x,2);但问题是,我想要8位的答案。它给了我,例如x=5,所以输出将是101,但我想要00000101。有没有办法在数组的开头附加零?还是可以立即得到8位的答案?我在C++中这样做 最佳答案 在C++中,最简单的方法是可能使用std::bitset:#include#includeintmain(){intx=5;std::bitsetbin_x(x);std::cout结果:00000101