位运算的基础知识点(关联指针、数组的操作)

一、位运算符和位运算:

  

说明:

  (1).位运算符中除~以外,均为二目(元)运算符,即要求两侧各有一个运算量。

  (2).运算量只能是整型或字符型的数据,不能为实型数据。

    “按位与”(&)两个相应的二进位都为1,则该位结果为1,否则为0。<用途:a.清零,指定单元的清零。b.取指定位的数据。c.保留指定位数据。>“按位或”(|)两个相应的二进位只要其中之一为1,该位的结果为1,同时两位都为0才为0。“异或”(^)判断两个相应的值是否为“异”,为“异”(值不同)就取真(1),否则为假(0)。<用途:a.使特定位翻转。b.与0相^,保留原值。c.交换两个值,不用临时变量。>“取反”(~)~是单目(元)运算符,用来对一个二进制数按位取反,即将0变为1,1变为0。“左移运算符”(<<)用来将一个数的各二进位全部左移若干位。“右移运算符”(>>)用来将一个数的各二进位全部右移若干位。<注意:右移要注意是算术右移还是逻辑右移。>

  (3).位运算赋值运算符:位运算符与赋值运算符可以组成复合赋值运算符。如:&=,|=,>>=,<<=,^=.作用相当于先位运算然后再赋值运算。

  (4).不同长度的数据进行位运算:对于不同长度的两个数据进行位运算时,系统会将二者按右对齐,对左侧则补满差位,对于负数则左端一位补满1。为正数左侧补满0,为无符号整数型,则左侧添满0。

二、位运算举例:(略过)

三、位段:

  1.可以人为地将一个整型变量data分为几部分。177417称为“屏蔽字”。(“屏蔽码”的计算请参考C语言程序设计第二版P305下面的一个例题。)

  2.位段,C语言允许在一个结构体中以位为单位来指定起成员所占内存长度,这中以位为单位的成员称为"位段"或称“位域”(bit field)。利用位段能够用较少的位数存储数据。

关于位段的定义和引用,有几点说明:

  (1).位段成员的类型必须指定为unsigned或int类型。

  (2).若某一位段要从另一个字开始存放,可以用以下定义形式:unsigned a:1; unsigned b:2;一个存储单元 unsigned  :0; unsigned c:3;(另一存储单元)。

  (3).一个段位必须存储在同一存储单元中,不能跨越两个单元。如果第一个单元空间不能容纳下一个位段,则该空间不用,而从下一个单元起存放该位段。

  (4).可以定义无名位段:unsigned  :2;(这两位空间不用)。

  (5).位段的长度不能大雨存储单元的长度,也不能定义位段数组。

  (6).位段可以用整型格式符输出。如:printf("%d,%d,%d",data.a,data.b,data.c);当然也可以用%u、%o、%x等格式符输出。

  (7).位段可以在数值表达式中引用,它会被系统自动地转换成整型书。如:data.a+5/data.b是合法的。

posted on 2011-09-30 16:10  呓语若梦半浮生  阅读(881)  评论(0编辑  收藏  举报

导航