📄 00000004.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: <A HREF="mailto:ax.bbs@bbs.ee.nthu.edu.tw.">ax.bbs@bbs.ee.nthu.edu.tw.</A> (athena), 信区: test <BR>标 题: 星星流讲座 0007 <BR>发信站: ☆清华电机☆ (Thu May 4 18:11:15 1995) <BR> <BR> <BR>第 2 讲 之 4 Arithmetic Operations <BR> Topic: 位元逻辑运算 <BR> <BR>在 C 语言中,我们除了以十进位的方式表示数字之外,也可以用八进位和十六 <BR>进位的型式来表示数字。请看下面的□例程式: <BR> <BR>/* octhex.c */ <BR> <BR>#include <stdio.h> <BR> <BR>main () <BR>{ <BR> int a, b; <BR> a = 064; <BR> b = 0x1a; <BR> printf ("%d %d\n", a, b); <BR>} <BR> <BR>执行结果: <BR> <BR>52 26 <BR> <BR>C 语言中表示八进位数字的方法就是以 0 开头的整数自动被视为八进位,同理, <BR>以 0x 开头的数自动被视为十六进位。只有整数可以被表示成八进位和十六进位 <BR>的型态,也就是说,你不可以写出像 a = 0x65.1 这种型式的东西。正负号则可 <BR>以像平常一样加在数的前面。 <BR> <BR>由我们的例子中可以发现,printf 是以十进位显示数字的。 <BR> <BR>C 语言提供了下面几种运算子可供数值做位元逻辑运算: <BR> <BR> 运算子 功能 <BR> <BR> << 左移 N bit (Shift Left N bit) <BR> >> 右移 N bit (Shift Right N bit, and keep sign bit) <BR> & AND <BR> | OR <BR> ~ 取 1 补数 (1's complement) <BR> ^ XOR (Exclusive OR) <BR> <BR>我们假设各位都能了解这些运算的意义 ^_^,下面是一个简单的□例程式: <BR> <BR>/* bool.c */ <BR> <BR>#include <stdio.h> <BR> <BR>main () <BR>{ <BR> unsigned short a, b; <BR> short d, e; <BR> <BR> d = 0xff; <BR> e = -0xff; <BR> a = 0xaa; <BR> b = 0xa1; <BR> <BR> printf ("%x %x %x\n", d << 1, e << 1, e >> 1); <BR> printf ("%x %x %x %x\n", a & b, a | b, a ^ b, ~a); <BR>} <BR> <BR>执行结果: <BR> <BR>1fe fffffe02 ffffff80 <BR>a0 ab b ffffff55 <BR> <BR>程式中 d << 1 表示把 d 的值左移 1 bit。此外 printf 中我们使用 %x 这个引数 <BR>代替我们原来常用的 %d,这是为了把数字以十六进位显示的缘故。各位可以尝试著 <BR>把这个结果以二进位的方式列出来,你会发现 sign bit 是被保留著的。 <BR> <BR>C 语言对於位元运算的运算子,也提供了对应的指定运算子,列表如下: <BR> <BR> 原来的运算式 比较简洁的运算式 <BR> <BR> a = a << 2 a <<= 2 <BR> a = a >> 2 a >>= 2 <BR> a = a & b a &= b <BR> a = a | b a |= b <BR> a = a ^ b a ^= b <BR> <BR>请注意并没有 ~= 这个运算子。~ 是一个单元运算子 (unary operator),也就 <BR>是它的运算元 (operand) 只有一个,而其他我们所介绍过的运算子都是二元运算子 <BR>(binary operator),它们的运算元有两个。 <BR> <BR>-- <BR>本文原作者为徐振家,原作刊载於星星神教总坛 ☆清华电机☆ test 板。 <BR>你可以以电子文件的形式将本文自由流传於台湾学术网路,但必须包含此版权声明。 <BR>原作者依中华民国著作权法之规定,享有本文之著作权,请勿抄袭以免触法。 <BR>未经授权任何人不得以任何形式对本文做任何修改及商业上之应用。 <BR>其他网路的转载或其他用途的应用,请先知会作者,并取得其同意。 <BR>对本文有任何疑问或意见请 mail 给 <A HREF="mailto:ax.bbs@bbs.ee.nthu.edu.tw,谢谢。">ax.bbs@bbs.ee.nthu.edu.tw,谢谢。</A> <BR> <BR> <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -