第二书包网

收藏备用网址www.dier22.com不迷路
繁体版 简体版
第二书包网 > c语言设计第三版 > 00001100 (十进制为 12)

00001100 (十进制为 12)

【例 12.3】

main(){

int a=9;

a=a^5;

printf("a=%d\n",a);

12.1.4 求反运算

求反运算符~为单目运算符,具有右结合­性­。其功能是对参与运算的数的各二进位按位

求反。

例如~9 的运算为:

~(0000000000001001)结果为:1111111111110110

12.1.5 左移运算

左移运算符“< 位,由“< 例如:

a<<4

指把 a 的各二进位向左移动 4 位。如 a=00000011(十进制 3),左移 4 位后为 00110000(十进

制 48)。

12.1.6 右移运算

右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若­干­

位,“>>”右边的数指定移动的位数。

例如:

设 a=15,

a>>2

表示把 000001111 右移为 00000011(十进制 3)。

应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补

0,而为负数时,符号位为 1,最高位是补 0 或是补 1 取决于编译系统的规定。Turbo C 和很

多系统规定为补 1。

【例 12.4】

main(){

unsigned a,b;

printf("input a number: ");

scanf("%d",&a);

b=a>>5;

b=b&15;

printf("a=%d\tb=%d\n",a,b);

请再看一例!

【例 12.5】

main(){

char a='a',b='b';

int p,c,d;

p=a;

p=(p<<8)|b;

d=p&0xff;

c=(p&0xff00)>>8;

printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);

12.2 位域(位段)

有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例

如在存放一个开关量时,只有 0 和 1 两种状态,用一位二进位即可。为了节省存储空间,并

使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。

所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。

每个域有一个域名,允许在程序中按域名进行­操­作。这样就可以把几个不同的对象用一个字

节的二进制位域来表示。

1. 位域的定义和位域变量的说明

位域定义与结构定义相仿,其形式为:

struct 位域结构名

{ 位域列表 };

其中位域列表的形式为:

类型说明符 位域名:位域长度

例如:

struct bs

int a:8;

int b:2;

int c:6;

};

位域变量的说明与结构变量说明的方式相同。 可采用先定义后说明,同时定义说明或者

直接说明这三种方式。

例如:

struct bs

int a:8;

int b:2;

int c:6;

}data;

说明 data 为 bs 变量,共占两个字节。其中位域 a 占 8 位,位域 b 占 2 位,位域 c 占 6

位。

对于位域的定义尚有以下几点说明:

1) 一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存

放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。

例如:

struct bs

unsigned a:4

unsigned :0 /*空域*/

unsigned b:4 /*从下一单元开始存放*/

unsigned c:4

一秒记住www点dier22点com,最新小说等你来
『加入书签,方便阅读』