4、假设QQ用户包含8种状态,QQ号码为42亿,最少用多少内存标识所有用户状态?( )
A. 约500M
B. 约1G
C. 约1.5G
D. 约2G
参考答案:C
一个内存0/1能表示两种状态
4210^84=16810^8=16.810^9=
提问:
请问一下这是怎么得来的呀
4210^8 表示用户数 大概2^32 也就是32个比特位来表示用户数
状态有8种,为什么只需要4,8种状态不应该由 3个比特位来表示吗
16.8*10^9为什么结果选1.5G呀 就算是bit转byte 那是%8,应该是2G左右呀
烦请告知一下,谢谢您了。
如果每个用户状态用1个字节来表示,那么所有用户状态的总内存占用为:
42亿 * 1字节 = 4.2GB
但是,由于8种状态只需要3个二进制位来表示($2^3=8$),因此每个用户状态只需要占用3个二进制位,即0或1的组合。这样,所有用户状态的总内存占用为:
42亿 * 3位 / 8位 = 15.75亿字节 ≈ 1.5GB
因此,最少需要1.5GB的内存来标识所有用户状态。
没毛病啊
4G用户乘以3bit=12Gbit,/8换算也就是1.5GBytes
#include <stdio.h>
int ti[11] = { 0 }; //用来存储每道题的回答情况0或者1,0表示错误,1表示正确
//提醒:数组ti的编号实际用1-10
//score表示当前得分,num是当前第num道题目
void f(int score, int num)
{
if (num == 11)//10道题目全部做完
{
if (score == 100)
{
int i = 0;
for (i = 1; i <= 10; i++)
printf("%d", ti[i]);
printf("\n");
}
}
else //10道题目没有做完
{
ti[num] = 1; //讨论第num道题目的正确情况
f(score * 2, num + 1);
ti[num] = 0; //讨论第num道题目的错误情况
f(score - num, num + 1);
}
}
int main(void)
{
f(10, 1);//从基础分10分开始,从第1题开始
return 0;
}