免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 没本

吐槽一下直到C11居然还没有2进制 [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:45
发表于 2012-02-16 16:03 |显示全部楼层
三月廿七 发表于 2012-02-16 09:48
真佩服你的智商,口算都可以算出来,
没有计算器,我真算不出来...


口算挺简单的,首先记住16进制中a, b, c, d, e, f减去8的差是多少。然后再记住0-7各自的2进制表示是多少。
转换的时候以4位为一个转换单位,大于等于8的,最高位为1,剩下三位用0-7对应的二进制替换即可

论坛徽章:
0
发表于 2012-02-16 16:25 |显示全部楼层
AD8018 发表于 2012-02-15 23:16
嵌入式,坑死你!
你出去找工作的时候,还有人以为嵌入式就是写写硬件IO,你不服?!



真搞硬件的还瞧不起搞嵌入式的

论坛徽章:
0
发表于 2012-02-16 17:14 |显示全部楼层
鸡丝拌面 发表于 2012-02-16 16:25
真搞硬件的还瞧不起搞嵌入式的


不敢,俺觉得嵌入式是软件世界里最苦命的一朵奇葩了。

搞了N年嵌入式,可能从来都是写写系统软件,
直到某天你的老板跟你说,某某设备上要支持SQL查询,
我勒个去,那个连linux都跑不了的设备。。。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2012-02-16 19:48 |显示全部楼层
回复 11# walleeee

理论上说,定长是相对的,变长才是绝对的。
万一哪天就发现地外文明,人家的字符早超过2^32个了呢……

实践上说…… 2^16显然不会够,Java,C#的char都是目光短浅的行为。
但2^32感觉真的很大了…… 指数增长不是吹的……

最后,C与C++可没规定wchar_t有多大……  这就是相对Java,C#的高明之处。

论坛徽章:
0
发表于 2012-02-16 21:17 |显示全部楼层
回复 34# OwnWaterloo


    我还听说给java搞unicode支持的还是ibm搞icu的那波人,不知道处于什么样的考虑让java的字符为2个字节,真是费解。

对于wchar_t可变,这个本身没问题,关键是标准没给长度,就造成了msvc定义成2个字节,一个unsigned short,而gcc则当成4个字节,就是wint_t。我还没考察其他编译器。这个对于源代码的移植是很蛋疼的。所以我还是希望char能是4个字节,而要来什么char16_t,char32_t这种,尽管目前的unicode6.1只要21个bit就够了,但是对于现在的存储而言,4个字节完全不是什么问题。另外,c系语言还应该追加一个byte类型,这个可以作为低级操作,代表字节。

论坛徽章:
0
发表于 2012-02-16 22:26 |显示全部楼层
还是utf-8的方法好,按照其规律,可以有无限的可扩展性。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2012-02-17 01:01 |显示全部楼层
回复 35# walleeee

也许只是因为C的type是面向机器的,用的术语不同。

char: 执行环境能够寻址的最小单元,C语言称为byte,但不是通常含义的8bits octet。
int: 其实本意是用作机器字长的,但貌似已经偏离了……
wchar_t: 可表示执行环境locale中的任意字符。

msvc(以及mingw等)定义为16bits是因为windows定义为16bits,那一堆Wide版本的api……


定长type在c99,c++11里面提供了(其实没提供之前也被大量使用)。
uint8_t: octet。
uint32_t: 可以用来支持utf32……

不过定长type在c99里面是可选的,实现可以不提供…… C++11没研究过,不过应该也是如此。

论坛徽章:
0
发表于 2012-02-17 01:46 |显示全部楼层
回复 37# OwnWaterloo


    c99里面可选?应该是必须定义的把,stdint.h必须定义这些定长类型啊。倒是c++一直没有定义这些,尽管可以用c的。

还有,我是很讨厌那些个_t这种东西,int8多好,非要来int8_t,生怕别人不知道是个type,即便这样,那么以前的int也该叫int_t。

对于int的大小,我也希望这个就代表机器字长(这个有好多说法,有人说是2个字节,这些人估计是看ms的东西看多了,但是老一些的书籍都把机器字长当总线带宽来处理,x86就是32位,amd64就是64位)。但是long还好,32位下大多数编译器,包括主流的msc和gcc都是32位,在64位下都是64位。但是标准就是很蛋疼,偏偏写了个sizeof(int)<=sizeof(long)无语。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2012-02-17 02:11 |显示全部楼层
回复 38# walleeee

c99可选,类似的还包括intptr_t之类。
sw貌似用过CHAR_BITS==32的…… uint8_t该怎么办……
intptr_t貌似是说,这东西总是可以实现,但貌似在一些平台上代价不算小,所以标记为optional。
least与fast还有max是必须提供的。
C++11有cstdint,即使没有C++11的实现,boost也有,即使不boost,C++偷C的头文件已经是惯例了……


相比_t,我觉得更怪的是long long,long double…… 还有printf越来越多的%什么什么……
只能说里奇他们一开始没考虑好这样的问题……

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
发表于 2012-02-17 10:26 |显示全部楼层
digdeep126 发表于 2012-02-16 15:57
C++中好像有个 bitset .

std::bitset搞不定的,因为bitset不是编译期常量
要搞的话,你可以用 constexpr函数 或 自定义字面值后缀
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP