c语言的巨大作用,C语言中的几个重要概念

C语言中的几个重要概念

│a │   │0x0030 │0000000000110000│

│ │   │0x000f │0000000000001111│

├─┴───┼────┼────────┤

│按位或  │    │0000000000111111│

│运算结果 │    │        │

└─────┴────┴────────┘

(3).将某数特定位置翻转

例 a ^ 0x000f使a的低4位翻转(0变1;1变0)。

┌─┬───┬────┬────────┐

│数│   │十六进制│   补码   │

├─┼───┼────┼────────┤

│a │   │ 0x007a │0000000001111010│

│ │   │ 0x000f │0000000000001111│

├─┴───┼────┼────────┤

│ 按位异或 │    │0000000001110101│

│ 运算结果 │    │        │

└─────┴────┴────────┘

(4)将a的右起第2位反向变化(1变0,0变1)

a=a^0x02;//(0x02=00000010),异或的意义是"同值为0"

(5).将两个数(整型数)的值互换

例 a=a^b;b=b^a;a=a^b; //三步使得a、b的值互换

3.移位运算的特殊用途

(1).将某数除以2(右移1位)

例 a>>2 使得a被4除

①对于 signed a=-8,a>>2

a=-8

┌─┬─┬─┬─┬─┬─┬─┬─┐

│1 │1 │1 │1 │1 │0 │0 │0 │

└─┴─┴─┴─┴─┴─┴─┴─┘

├─┬─┐ ──>  └───┐

┌─┬─┬─┬─┬─┬─┬─┬─┐

│1 │1 │1 │1 │1 │1 │1 │0 │

└─┴─┴─┴─┴─┴─┴─┴─┘

a=-2

②对于unsigned a=248,a>>2

a=248

┌─┬─┬─┬─┬─┬─┬─┬─┐

│1 │1 │1 │1 │1 │0 │0 │0 │

└─┴─┴─┴─┴─┴─┴─┴─┘

└───┐ ──> └───┐

┌─┬─┬─┬─┬─┬─┬─┬─┐

│0 │0 │1 │1 │1 │1 │1 │0 │

└─┴─┴─┴─┴─┴─┴─┴─┘

补0──┴─┘    a=62

(2).将某数乘以2(左移1位)

注 左移时signed 与unsigned变量的情况一样,均要补0。

(3)将x的'右起第n(n>=0)位置0

x&=~(1《n); 若x是long,则x&=~((long)1《n);

(4)将x的右起第n(n>=0)位置1

x|=1《n;

若x是长整形数则 x|=(long)1《n;

五、C语言访问CPU寄存器的方法

1.使用联合REGS,和函数 int86() / int86x() / intr()

REGS是用来在进行 DOS软中断调用时向各个寄存器传输数据或从各个寄存器取出返回值。

union REGS 示意图

struct     struct

WORDREGS    BYTEREGS

┌  ┌───────┬──────┐──┬──  ┐

│  │       │   al   │ 1 byte   │

│  │   ax   ├──────┤──┴─ 2 bytes

│  │       │   ah   │       │

│  ├───────┼──────┤─────  ┘

│  │       │   bl   │

│  │   bx   ├──────┤

│  │       │   bh   │

│  ├───────┼──────┤

│  │       │   cl   │

│  │   cx   ├──────┤

│  │       │   ch   │

│  ├───────┼──────┤

│  │       │   dl   │

│  │   dx   ├──────┤

│  │       │   dh   │

union regs├───────┼──────┤

│  │       │      │

│  │   si   │      │

│  │       │      │

│  ├───────┤      │

│  │       │      │

│  │   di   │      │

│  │       │      │

│  ├───────┤      │

│  │       │      │

│  │  cflag   │      │

│  │       │      │

│  ├───────┤      │

│  │       │      │

│  │  flags   │      │

│  │       │      │

└  └───────┴──────┘

│   x 两个结构变量 h  │

└──  共享同一存储域 ──┘

2.使用伪变量和函数geninterrupt()

Turbo C 允许使用伪变量直接访问相应的8086寄存器。伪变量的类型有两种。

① unsigned int : _AX、 _BX、 _CX、 _DX、 _CS、 _DS、 _SS、 _ES、 _SP、 _BP、 _DI、 _SI

② unsigned char: _AL、 _AH、 _BL、 _BH、 _CL、 _CH、 _DL、 _DH

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值