科研办主任篇——重温C语言(1) 位、字节、字;我们要用windows api
来源:互联网 发布:ipv4无网络访问权限 编辑:程序博客网 时间:2024/05/20 18:46
2016年,我有幸成为山东大学威海校区2016级新生的科研办主任,这一定会是一段美好的回忆,也一定是值得我品味一生的经历。
给新人入门总是最难的,而我真真切切感受到了这一真理。有心改变国内教育高大上(假大空)和极其抽象的弊病,终于发现本科老师的难处:想要讲实际点的东西,一点基础没有根本进行不下去;讲完基础再讲实际的深层次的内涵,课时量就那么多,怎么讲得过来?
限于我的教学0经验(倒是干过私人家教,但是与集体教学完全不一样),我尝试利用qq这一平台通过视频进行教学,并把教学视频录制了下来(将传到我的个人网站),但是初次感觉并不像预期的那么理想,控场能力还有待提升啊。
10月3号晚上,进行了c语言教学的第一节课,从新建工程开始,讲怎么设断点,监视变量,单步调试等等,讲什么是数据类型,讲最基本的数据类型。但是发现同学们大部分完全没有接触过类似内容,很大一片都有了畏难情绪,,,这就很蛋疼了(不过还是有不少愈挫愈勇的孩纸,坚持)。所以课程到后来基本就成了“这就是格式,初学的时候先别太纠结为什么,咱们先继续往下进行,暂时记住这个格式就好了。哪里想知道的私聊。”
我也知道这话有敷衍成分,但是不这样根本进行不动。好在同时录了视频,哪里不懂的重播视频应该能好一些,至于想求根问底私聊的,连5个都不到。真是,,浓浓的挫败感啊。。。
不好,吐槽吐多了。今天的正题好像是说位、字节、字的相关内容。
很多中文资料都有提到位、字节、字的知识点。但是不得不说,都写得很烂。英文的资料倒是挺详细的,从8位机,16位机,32位机,64位机一步步讲过来,讲c语言历史,讲windows api的好处。不过,我想,看我这篇blog的人估计没多少是愿意耐下心来仔仔细细看英文资料的吧。虽然这样,但我仍希望您能够适应英文的文献,论坛(我最受不了的就是英文论坛,扯来扯去就看晕了)。
在昨晚讲课过程中,对int取值范围这个地方卡住了。今天仔细查了一些资料,终于差不多弄清了这个地方。
以下是正文内容……前言有点多了。。。
还记得昨天晚上开播讲课的时候有些地方拿不准,今天我查了一下,在此给出明确答案:
1、 在C/C++中int的范围究竟是多大。
2、 位、字节、字、32bit/64bit
欲要解决这两个问题,首先要明确第二个,即位、字节、字的关系。
一个字节(byte)是8位,也叫8比特(bit,音译过来的)
计算机进行数据处理时,一次存取、加工和传送的数据长度称为字(word)。
C语言中似乎没有强调机型位数的差别,而windows的API有较好的显示,https://msdn.microsoft.com/en-us/library/aa383751(VS.85).aspx
“字”概念的提出是在16位机型的时候,因此字就是unsigned short,范围是0-65535(2^16-1)。为了程序兼容性之类的原因,windows并未在出现32位机与64位机之后改WORD的范围,而是增加了DWORD以支持32位机,范围是0-4294967295(2^32-1)。已经够大了吧!如果你的应用还需要更大的数,windows api还提供了UINT64,范围是0-18446744073709551615(2^64-1),足足有20位数字。。。
发现扯远了,回到我们初学常用的int上面。
现在大家的机型基本都是64位机了(科技发展好快,电脑的位数一般只考虑cpu,不清楚的同学上网查一下cpu型号,看看是不是64位的),int在初学的应用中默认是4个字节即32位的数,它与上面的DWORD的区别是:int有符号。因此其范围是-2147483648到2147483647(-2^31到2^31-1,至于为什么,这里牵扯到反码,补码一系列知识,《编码——隐藏在计算机软硬件背后的语言》一书讲得很好)
这里我提供了一个小程序来验证我的这番言论:
int t = 2147483647; // 2^31-1
unsigned int u = 4294967295; // 2^32-1
// 以下是windows api,需要windows.h头文件DWORD d = 4294967295; // 2^32-1WORD w = 65535; // 2^16-1UINT64 u64 = 18446744073709551615; // 2^64 -1
大家可以改改数字大小,加一减一的试验一下。
但是,当大家脱离菜鸟阶段,尽量减少诸如int、long之类的使用。如果写windows程序就是用windows api(如WORD、DWORD、UINT32、UINT64、INT32、INT64等),写linux就参考linux api。
最后吐槽一句:LONG64、LONG32这种跟INT64、INT32毫无区别啊,为毛整出那么多来看着眼晕。。。
Reference:
http://stackoverflow.com/questions/7750140/whats-the-difference-between-a-word-and-byte
http://stackoverflow.com/questions/2995251/why-in-c-do-we-use-dword-rather-than-unsigned-int
http://www.cnblogs.com/augellis/archive/2009/09/29/1576501.html
http://bbs.csdn.net/topics/10180696
- 科研办主任篇——重温C语言(1) 位、字节、字;我们要用windows api
- C语言 位,字节
- c语言重温笔记(1)
- c语言数据类型对应字节数(32位,64位 int 占字节数)
- c语言数据类型对应字节数(32位,64位 int 占字节数)
- 重温数据结构之链表二——C语言实现
- 重温C语言----(一)储备性知识
- 20110603 C语言重温
- 重温C语言
- 重温C语言_Day01
- C语言基础之《位, 字节,内存》
- c语言中 “字节” “位” 的区别
- C语言(三):进制数、位、字节
- 投入科研要准备多久?——与青年朋友谈科研(1)
- C语言+windows API仿写类酷狗播放器(1)
- 重温c语言之收获
- 重温c语言之环境变量
- 重温C语言之路
- Spark 学习(在master节点提供向外服务)
- java中Properties类的操作
- 第三十三讲 项目 三种循环语句
- selenium1 mac 上安装
- AS使用wifi调试真机
- 科研办主任篇——重温C语言(1) 位、字节、字;我们要用windows api
- 剑指Offer 53题 正则表达式匹配 Java版
- Contiki简介
- java:前言
- php7的十件小事
- 程序员准备跳槽了,如何选择下一家IT公司?
- 浅析Java中的反射机制原理
- Android5.0--ToolBar学习
- OC中在.h和.m中声明的属性和成员变量