如何在记事本中做网站链接做网站建设的方案
- 作者: 五速梦信息网
- 时间: 2026年03月21日 09:49
当前位置: 首页 > news >正文
如何在记事本中做网站链接,做网站建设的方案,展馆展示设计公司哪家好,楼盘查询2.8 自增和自减操作符 C提供了两个不同寻常的操作符#xff0c;用于对变量进行自增和自减。自增操作符对操作数加上1#xff0c;而自减操作符 – 对操作数减去1。我们已经频繁使用 对变量进行自增#xff0c;如#xff1a; if (c \n)nl; 不寻常之处在于 和 – 既能用作…2.8 自增和自减操作符 C提供了两个不同寻常的操作符用于对变量进行自增和自减。自增操作符对操作数加上1而自减操作符 – 对操作数减去1。我们已经频繁使用 对变量进行自增如 if (c \n)nl; 不寻常之处在于 和 – 既能用作前缀操作符在变量之前如n又能用作后缀在变量之后如n。两种情况下效果都是n递增。不过表达式 n 是在它的值被使用之前对n进行递增而 n是在它的值被使用之后对n进行递增。这意味着如果不仅要用到递增的效果还要用到表达式的值时n 和 n 是不一样的。如果 n 为 5则 x n; 将x设为5而 x n; 将x设为6。两种情况下n都会变成6。自增和自减操作符只能用于变量像 (ij) 这样的表达式是非法的。 当只需要用到递增效果而不需要值的时候如 if (c \n)nl; 前缀和后缀是一样的。不过有些情况下会专门要求使用前缀而有些则专门使用后缀。举个例子看看下面这个函数 squeeze(s, c) 将字符串s中出现的所有字符c都删除 /* squeeze: 从s中删除所有的c / void squeeze(char s[], int c) {int i, j;for (i j 0; s[i] ! \0; i)if (s[i] ! c)s[j] s[i];s[j] \0; } 每当非c字符出现时它就被拷贝到当前的 j 位置而只有这时 j 才会自增为接收下一个字符做准备。与下面的写法是完全相同的 if (s[i] ! c) {s[j] c;j; } 类似结构的另一个例子来自于我们在第一章写的 getline 函数其中的 if (c \n) {s[i] c;i; } 可以替换成更紧凑的形式 if (c \n)s[i] c; 第三个例子可以看看标准库函数 strcat(s, t)它将字符串 t 连接到字符串 s 的末尾。strcat 假定 s 有足够的空间来存放合并的结果。按我们下面的写法 strcat 不返回值标准库的strcat版本返回指向结果字符串的指针。 / strcat: 把t拼接到s的末尾s必须足够大 / void strcat(char s[], char t[]) {int i, j;i j 0;while (s[i] ! \0) / 找到s的结尾 /s;while ((s[i] t[j]) ! \0) / 拷贝t /; } 由于每个字符都要从 t 拷贝到 s后缀同时用于 i 和 j以保证它们在循环的下一轮时处于正确的位置。 练习2-4写另一个版本的 squeeze(s1, s2)把字符串s1中出现的所有字符串 s2 都删除 练习2-5写一个函数 any(s1, s2)返回字符串s2中任意字符在字符串s1中首次出现的位置如果s1不包含s2的任何字符则返回-1。标准库函数 strpbrk 做同样的事但返回的是位置的指针 2.9 位运算操作符 C提供了六个位操作符它们只能用于整型即 char, short, int 和 long不管有无符号均可。 按位与 | 按位或 ^ 按位异或 左移 右移 ~ 取反一元 按位与操作符 经常用于屏蔽位中的某些部分例如 n n 0177 只保留 n 的低7位其他位都设为0。 按位或操作符 | 用于将一些位打开设为1 x x | SET_ON 会将 SET_ON 中为1的位设置到 x 上对应的位。 按位异或操作符 ^ 的规则是若两个操作数对应的位不同时则运算结果中该位设为1若相同则设为0。 必须把位操作符 | 和逻辑运算符 || 区分开后者隐含的是从左到右的真值计算。 例如如果 x是1y 是2则 x y 结果为0 而 x y 结果是1。 移位操作符 和 分别对它们左边的操作数进行左移或者右移移动的位数由右边的操作数必须为正数指定。这样 x 2 会将 x 的值左移两位空出的位补0这就等于乘以 4。对 unsigned 值进行右移空位总是补0。对有符号的值进行右移在有些机器上会填充符号位算术移位而有些机器上填充0逻辑移位。 一元操作符 ~ 得出整数的反码也就是说把每个1都转成0每个0都转成1。例如 x x ~077 把 x 的低6位设为0。注意 x ~077 不依赖于字长这种写法比假定字长的写法好比如 x 0177700 假定 x 是 16位的值。可移植的写法不涉及额外的开销因为 ~077 是常量可以在编译期间求值。 函数 getbits(x, p, n) 可用来演示一些位操作符的用法该函数返回 x 从位置 p 算起的 n 个位右对齐。我们假定第0位是最右边一位并且 n 和 p 都是合适的正数。例如 getbits(x, 4, 3) 返回第 4第3 和 第2 位的三个比特右对齐。 / getbits返回从位置 p 开始的 n 个比特 */ unsigned getbits(int x, int p, int n) {return x (p1-n) ~(~0 n); } 表达式 x (p1-n) 把所需的比特位段移到字的最右边。~0 是所有位均为1用 ~0 n 把它左移 n 位会把最右边的 n 个位变为 0再对它取反就得到一个最右边 n 位 都是 1 的掩码。 练习2-6、写个函数 setbits(x,p,n,y)返回值是 x 从位置 p 开始 的 n 个位 被 y 的最右边 n 个位替换后得到的值x 其他位都不变。 练习2-7、写个函数 invert(x,p,n) 返回值是 x 从位置 p 开始的 n 个位被翻转即0变11变0后的结果其他位都不变。 练习2-8、 写个函数 rightrot(x,n)返回值是整数 x 向右旋转了 n 个位。 2.10 赋值操作符和表达式 i i 2 像这种左侧的变量在右边马上重复出现的表达式可以写成紧凑的形式 i 2 其中操作符 被称为 赋值操作符。 大部分的二元操作符像 这样左右两边各有一个操作数的操作符都有一个对应的赋值操作符 op 其中 op 是下列操作符之一 - * / % ^ | 设有表达式 expr1 和 expr2则 expr1 op expr2 等价于 expr1 (expr1) op (expr2) 唯一区别是在前面一种形式中 expr1 只会被计算一次。注意 expr2 两边的括号 x * y 1 意思是 x x * (y1) 而不是 x x * y 1 看看下面这个例子函数 bitcounts 统计其整数参数中为1的比特位数量。 /* bitcounts: 计算x中为1的比特位数量 */ int bitcounts(unsigned x) {int b;for (b 0; x ! 0; x 1)if (x 01)b;return b; } 将参数 x 声明为 unsigned 可以保证对 x 做右移时左边填充的总是0而不是符号位不管这个程序在什么样的机器上运行。 除了简洁之外赋值操作符的优势在于它们与人们思考的方式更为一致。我们会说“把 i 加上 2 ”或者“ i 自增 2 ”而不是“拿到 i 的值加上 2 再把结果放回 i ”。因此 表达式 i 2 比 i i 2 更好。另外对于复杂的表达式如 yyval[yypv[p3p4] yypv[p1]] 2 赋值操作符使代码容易理解因为读者不必费力地检查两个长表达式是否相等或者疑惑它们为什么不相等。而且赋值操作符甚至能帮助编译器生成高效的代码。 我们已经知道赋值语句是有值的可以出现在表达式中最常见的例子是 while ((c getchar()) ! EOF)… 其他赋值操作符 - 等也能出现在表达式中不过出现频率会低些。 在所有这样的表达式中赋值表达式的类型就是它左边操作数的类型而赋值表达式的值就是赋值之后的值。 练习2-9、在2的补码系统中x (x-1) 删除x最右边的一个比特位。解释为什么。并使用这个发现来写一个更快的 bitcount 版本。
- 上一篇: 如何在后台做网站分页jquery+js网站模板免费下载
- 下一篇: 如何在家里做网站广州牌手表网站
相关文章
-
如何在后台做网站分页jquery+js网站模板免费下载
如何在后台做网站分页jquery+js网站模板免费下载
- 技术栈
- 2026年03月21日
-
如何在国外网站开发新客人九亭做网站
如何在国外网站开发新客人九亭做网站
- 技术栈
- 2026年03月21日
-
如何在服务器上关闭网站wordpress xml大于2m
如何在服务器上关闭网站wordpress xml大于2m
- 技术栈
- 2026年03月21日
-
如何在家里做网站广州牌手表网站
如何在家里做网站广州牌手表网站
- 技术栈
- 2026年03月21日
-
如何在建设部网站查询获奖情况网络做推广
如何在建设部网站查询获奖情况网络做推广
- 技术栈
- 2026年03月21日
-
如何在南美做网站推广怎么在手机上搭建网站
如何在南美做网站推广怎么在手机上搭建网站
- 技术栈
- 2026年03月21日






