C++ 如何将负数转换为二进制数,反之亦然?

C++ 如何将负数转换为二进制数,反之亦然?,c++,audio,binary,bitset,wave,C++,Audio,Binary,Bitset,Wave,我有一个音频文件,我把它的音频值转换成二进制数,这样我就可以把它们隐藏在图像像素中 我用来转换音频值的是位集,因为音频值存储在短int变量中 即使是负数,二进制的转换也能很好地工作,但是从负二进制值到十进制的转换不起作用,所以有人知道将负二进制数转换为十进制的合适方法吗 bitset <16>a = -8; cout<<a<<endl; output = 1111 1111 1111 1000 bitset <16>b = 8; cout<

我有一个音频文件,我把它的音频值转换成二进制数,这样我就可以把它们隐藏在图像像素中

我用来转换音频值的是位集,因为音频值存储在短int变量中

即使是负数,二进制的转换也能很好地工作,但是从负二进制值到十进制的转换不起作用,所以有人知道将负二进制数转换为十进制的合适方法吗

bitset <16>a = -8;
cout<<a<<endl;
output = 1111 1111 1111 1000

bitset <16>b = 8;
cout<<b<<endl;
output = 0000 0000 0000 1000
// but if i tried to convert the binary that i got earlier from the -8
bitset <16> c = 1111111111111000;
cout<< c.to_ulong()<<endl;
output = 29016
// how can i get the output of -8 from the c?  
位集a=-8;

coutPop测验:1111000是多少?为什么你认为它应该是-8?我这样认为的唯一原因是因为这是我从coutIf那里得到的输出如果你写:
int n=1111111111000
,你真的认为你会在变量中得到-8吗?当然不是。这是1000元还是1000元?你不能回答。编译器根据语法规则进行读取,并确定它是1000。现在将其与
c=1111111000
进行比较。你希望编译器做什么?嗯,在你的评论之后,我再次阅读了解释,我得到了它来表示-8我通过这些步骤,如果我使用16位,那么8是0000 0000 000 000,使其为负数,我需要先求逆,这是1111111111111011,然后添加一个补码,我不知道如何做最后一部分