4、假设QQ用户包含8种状态,QQ号码为42亿,最少用多少内存标识所有用户状态?( )

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

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/746378
  • 你也可以参考下这篇文章:小工匠聊架构 - 缓存与数据库【双写不一致】&【读写并发不一致】解决方案一览
  • 除此之外, 这篇博客: C与C++程序设计学习笔记中的 5、某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。每位选手都有一个起步的分数为10分。某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的字符串来表示。例如:0010110011 就是可能的情况。你的任务是算出所有可能情况。每个答案占一行。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #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;
    }
    


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^