电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

水滴石穿C语言之C语言的底层操作

水滴石穿C语言之C语言的底层操作_第1页
1/67
水滴石穿C语言之C语言的底层操作_第2页
2/67
水滴石穿C语言之C语言的底层操作_第3页
3/67
下载后可任意编辑水滴石穿 C 语言之 C 语言的底层操作概述 C 语言 的内存模型基本上对应了现在 von Neumann(冯·诺伊曼)计算机的实际存储模型,很好的达到了对机器的映射,这是 C/C++适合做底层开发的主要原因,另外,C 语言适合做底层开发还有另外一个原因,那就是 C 语言对底层操作做了很多的的支持,提供了很多比较底层的功能。 下面结合问题分别进行阐述。 问题:移位操作 在运用移位操作符时,有两个问题必须要清楚: (1)、在右移操作中,腾空位是填 0 还是符号位; (2)、什么数可以作移位的位数。 答案与分析: ">>"和"<<"是指将变量中的每一位向右或向左移动, 其通常形式为: 右移: 变量名>>移位的位数 左移: 变量名<<移位的位数 经过移位后, 一端的位被"挤掉",而另一端空出的位以 0 填补,在 C 语言中的移位不是循环移动的。 (1) 第一个问题的答案很简单,但要根据不同的情况而定。假如被移位的是无符号数,则填 0 。假如是有符号数,那么可能填 0 或符号位。假如你想解决右移操作中腾空位的填充问题,就把变量声明为无符号型,这样腾空位会被置 0。 (2) 第二个问题的答案也很简单:假如移动 n 位,那么移位的位数要不小于 0 ,并且一定要小于 n 。这样就不会在一次操作中把所有数据都移走。 比如,假如整型数据占 32 位,n 是一整型数据,则 n << 31 和 n << 0 都合法,而 n << 32 和 n << -1 都不合法。 注意即使腾空位填符号位,有符号整数的右移也不相当与除以 。为了证明这一点,我们可以想一下 -1 >> 1 不可能为 0 。 问题:位段结构struct RPR_ATD_TLV_HEADER{ULONG res1:6;ULONG type:10;ULONG res1:6;ULONG length:10; };位段结构是一种特别的结构, 在需按位访问一个字节或字的多个位时, 位结构比按位运算符更加方便。 位结构定义的一般形式为: struct 位结构名{ 数据类型 变量名: 整型常数; 数据类型 变量名: 整型常数; } 位结构变量;其中: 整型常数必须是非负的整数, 范围是 0~15, 表示二进制位的个数, 即表示有多少位。 变量名是选择项, 可以不命名, 这样规定是为了排列需要。 例如: 下面定义了一个位结构。struct{ unsigned incon: 8; /*incon 占用低字节的 0~7 共 8 位*/ 下载后可任意编辑 unsigned txcolor: 4;/*txcolor 占用高字节的 0~3 位共 4 位*/ unsigned bgcolor: 3;/*bgcolor ...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

水滴石穿C语言之C语言的底层操作

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部