状态压缩,二进制储存状态

二进制储存状态:

假设有1e9个灯,要记录其开或关的状态。用数组肯定爆空间了(1e9个int,就是1e9*4个字节),此时可以用1e8个二进制位为10位的数来储存状态(2^10=1024,一个int就可以存下,最终是1e8*4个字节的空间),每个二进制位为1或0表示开或关。


二进制运算:
在这里插入图片描述


C/C++中直接表示二进制(其他进制):

在C/C++ 中天然的支持除10进制之外的三种进制的表示, 其前缀分别为:

二进制 : 0b
八进制 : 0
十六进制 : 0x

1.二进制

例: int x = 0b1001; // x = 9

2.八进制

例:int y = 074; // x = 60

3.十六进制

例: int z = 0xa3; // x = 163;

除此之外在char类型字符的表示时也可以用 8进制数 或 16进制数,

例: char A = ‘\101’ 这里 以\开头表述其后为八进制数 最终 ‘\101’ == 65 == ‘A’

例: char B = ‘\x42’ 这里 以\x开头表述其后为十六进制数 最终 ‘\x42’ == 66 == ‘B’


转换二进制:

将10进制数转换为2进制:

void Binarycout(int n)
{
	//32位
	for(int i = 31; i>= 0; i--)
	{
		cout<<((n>>i)&1);
	}
 
	cout<<endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值