我的任务看起来很简单,我需要计算表示一个可变整数所需的最小字节数(例如,如果整数是 5,那么我想返回 1;如果整数是 300,我想返回 2)。不是指数据类型 int,正如评论中指出的那样,它总是只是 sizeof(int),我指的是一个数学整数。我几乎有一个解决方案。这是我的代码:
int i;
cin >> i;
int length = 0;
while (i != 0) {
i >>= 8;
length++;
}
问题是这不适用于任何负数(我无法确定原因)或一些最高有效位为 0 的正数(因为符号位是使它成为 1 的位大一点)...关于如何处理这些情况,我可以获得任何提示或建议吗?
最佳答案
存储为单字节,
正数在 0x00
到 0x7F
范围内
负数在 0x80
到 0xFF
作为 2 个字节,
正数在 0x0000
到 0x7FFF
范围内
负数在 0x8000
到 0xFFFF
作为 4 个字节,
正数在 0x00000000
到 0x7FFFFFFF
范围内
负数在 0x80000000
到 0xFFFFFFFF
您可以使用如下函数来获取最小尺寸:
int getmin(int64_t i)
{
if(i == (int8_t)(i & 0xFF))
return 1;
if(i == (int16_t)(i & 0xFFFF))
return 2;
if(i == (int32_t)(i & 0xFFFFFFFF))
return 4;
return 8;
}
然后例如,当您看到0x80
时,将其转换为-128
。而7F
被翻译成127
,而0x801
应该被翻译成正数。
请注意,这将非常困难且毫无意义,应避免。这不适合以三字节存储数字,为此,您必须构建自己的格式。
关于c++ - 计算表示有符号整数所需的最小字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48433741/