C语言的位段

我之前搞JavaSE的日期的时候总是很迷惑。
为什么日期需要用1个long类型的来表示。date可是Java原声的,而且是抽象为时间的类啊。
为什么不这样定义:

class Date{
	int year;
	int month;
	int day;
	//balabala
}

非得在老早JDK1.1的时候就搞成一个long类型的值,1个毫秒,还得转化为时分秒。
虽然有Calendar。但那明显是为了更方便的使用Date搞出来的一个类。说白了自己也可以写。
知道啊,学习了素有:最接近底层的语言之称的C语言后才稍许明白。
我过去对Java很怀疑啊。有人说Java可以搞任何事情,说的就好像万能似的。可是它的int不分机器就是4个字节。
占用这么大的内存怎么搞?
就是那些网络。物联网领域可都是精确到字节的啊。
比如我设计一个协议:

EE CC --开始帧
第3~6个字节有特殊的代表含义
00 CC -- 结束帧

像这样的东西,你用Java怎么表达?用Java最最最基础的数据类型都无法表达。
我一直有这样的疑惑。
用Java的时候虽然可以写嵌入式,比如串口通信可以用到RTX那个jar包。但一直一直很疑惑。
现在看到了C的位段,觉得明白了一些。
C这种高级语言是有一种写法来直接操纵比特的。
而Java的话,它的时间可以用long表示其实是节约内存啊。

class Date{
	int year;
	int month;
	int day;
	//balabala
}

这样,花了12字节。
而long只有8字节。
如果日期有1亿个。
那么上面可以用1144G。下面用762.93G。
在这里插入图片描述
现在我们算一算硬盘 多少钱/GB
0.29元/G。
所以上面两种表示方法的差价:(1144-762.93)*0.29=110.5103元。
恩。差得不多。
但还是省钱了。
如果我们用C语言的位段来表示呢?

typedef struct {
	unsigned year : 16;
	unsigned month : 8;
	unsigned day : 8;
}TimeInfor;

只用3字节
还是1亿,总花了286.10G。
让它和Java原声的Date类比,
(762.93-286.10)*0.29=476.82元
剩了这么多。
上面的虽然是比较的硬盘,但我感觉数据你保存在内存中不是最终还是要保存到硬盘么?
当然这只是简单粗暴的一算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值