概述
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 。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器