C语言 百文网手机站

c语言问号冒号的用法

时间:2022-04-13 17:03:05 C语言 我要投稿

c语言问号冒号的用法

  有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1两种状态,用一位二进位即可。下面小编来为大家介绍c语言问号冒号的用法。

  为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。

  c语言问号冒号的用法如下:

  一、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:

  struct位域结构名

  {位域列表};

  其中位域列表的形式为:类型说明符位域名:位域长度

  例如:

  structbs

  {

  inta:8;

  intb:2;

  intc:6;

  };

  位域变量的说明与结构变量说明的方式相同。可采用先定义后说明,同时定义说明或者直接说明这三种方式。例如:

  structbs

  {

  inta:8;

  intb:2;

  intc:6;

  }data;

  说明data为bs变量,共占两个字节。其中位域a占8位,位域b占2位,位域c占6位。对于位域的定义尚有以下几点说明:

  1.一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。例如:

  structbs

  {

  unsigneda:4

  unsigned:0/*空域*/

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

  unsignedc:4

  }

  在这个位域定义中,a占第一字节的4位,后4位填0表示不使用,b从第二字节开始,占用4位,c占用4位。

  2.位域可以无位域名,这时它只用来作填充或调整位置。无名的位域是不能使用的。例如:

  structk

  {

  inta:1

  int:2/*该2位不能使用*/

  intb:3

  intc:2

  };

  从以上分析可以看出,位域在本质上就是一种结构类型,不过其成员是按二进位分配的。

  又:

  1:指针类型变量不能指定所占的位数

  2.在声明成员变量时,可以用变量名:bit数;

  来确定结构体类型的成员变量的值所占的字位数,如果在实际应用中,该变量的值超出了在声明它时所声明的'字位数,那么溢出的部分将会丢失。

  例子:

  #include

  #include

  usingnamespacestd;

  structBitVariable{

  unsigneda:2;

  unsignedb:3;

  unsigned:0;

  unsignedc:6;

  }BitVariable1;

  intmain(intargc,char*argv[])

  {

  BitVariableBV1;

  BV1.a=2;//10

  BV1.b=8;//1000

  BV1.c=86;//1010110

  cout<<BV1.a<<endl;//output2<===>10B

  cout<<BV1.b<<endl;//output0<===>1000B

  cout<<BV1.c<<endl;//output22<===>10110B

  cout<<sizeof(BitVariable)<<endl;//output8.int32位机器占4字节。如果将unsigned:0;去掉,则此处输出4。

  system("PAUSE");

  returnEXIT_SUCCESS;

  }

  【拓展】c语言小括号的用法

  1、单小括号 ()

  ①命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。

  ②命令替换。等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令。有些shell不支持,如tcsh。

  ③用于初始化数组。如:array=(a b c d)

  2、双小括号 (( ))

  ①整数扩展。这种扩展计算是整数型的计算,不支持浮点型。((exp))结构扩展并计算一个算术表达式的值,如果表达式的结果为0,那么返回的退出状态码为1,或者 是"假",而一个非零值的表达式所返回的退出状态码将为0,或者是"true"。若是逻辑判断,表达式exp为真则为1,假则为0。

  ②只要括号中的运算符、表达式符合C语言运算规则,都可用在$((exp))中,甚至是三目运算符。作不同进位(如二进制、八进制、十六进制)运算时,输出结果全都自动转化成了十进制。如:echo $((16#5f)) 结果为95 (16进位转十进制)

  ③单纯用 (( )) 也可重定义变量值,比如 a=5; ((a++)) 可将 $a 重定义为6

  ④常用于算术运算比较,双括号中的变量可以不使用$符号前缀。括号内支持多个表达式用逗号分开。 只要括号中的表达式符合C语言运算规则,比如可以直接使用for((i=0;i<5;i++)), 如果不使用双括号, 则为for i in `seq 0 4`或者for i in {0..4}。再如可以直接使用if (($i<5)), 如果不使用双括号, 则为if [ $i -lt 5 ]。

  下面的程序给多维数组初始化,注意初始化时花括号和小括号的区别

  [cpp] view plain

  #include

  intmain()

  {

  inta[2][2]={(1,2),(3,4),};//如果把小括号换成花括号,结果就不一样了,小括号(1,2)返回2(3,4)返回4,另外两个元素默认是0

  inti,j;

  for(i=0;i<2;i++)

  {

  for(j=0;j<2;j++)

  printf("%d",a[i][j]);

  printf(" ");

  }

  int*p=a[0];

  printf("%d ",p[0]);

  return0;

  }

  /*

  运行结果:

  24

  00

  2

  */

【c语言问号冒号的用法】相关文章:

c语言问号冒号怎么用09-27

assert用法(C语言)11-24

C语言指针的用法10-05

c语言new的用法10-04

c语言strcmp的用法09-28

c语言if语句的用法04-02

c语言链表的用法09-24

C语言中assert用法10-03

C语言指针用法详解09-20

C语言中的assert用法10-07