你如何获得 C 中 int 的二进制补码?
比如说我有一个 -254 这样的整数,我将如何将它转换为 100000010?
有没有办法从整数变量中提取出Two的补码值,因为我知道在C中,int存储在Two的comp中?
知道在 C 中,整数存储在 Two 的 comp 中
不能保证,但实际上每台计算机都使用二进制补码。
有没有办法从整数变量中提取出二进制补码值
它已经是二进制补码格式,所以不清楚你在问什么。您似乎在问如何以二进制格式打印变量?
int data = -254;
const size_t BITS = 8*sizeof(data);
char bin_str[BITS+1];
for(unsigned int i=0; i<BITS; i++)
{
unsigned int mask = 1u << (BITS - 1 - i);
bin_str[i] = (data & mask) ? '1' : '0';
}
bin_str[BITS] = '\0';
Run Code Online (Sandbox Code Playgroud)
如果您在unsigned ints 上操作,那么您可以反转位~并相1加以产生 2s 补码值。x=(~y)+1;如果您的机器使用 2s 补码表示,signed int那么这应该(根据实现的定义)转换为正确的signed int值。
C 语言本身在这方面的保证方面有点模糊。要可移植地处理对象的按位表示,您应该使用unsigned类型。