新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
~在这里是按位取反的意思。
创新互联主要从事成都网站建设、网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务潞城,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
按位取反是C语言位操作的一种,其操作符为~。该操作为单目操作,即只有一个操作数。
~与其后的数值或变量相结合,执行取反计算。
取反是按照二进制位进行计算的,当原操作数的第i位为0时,结果的第i位为1;否则该位值为0。
比如,char a = 0x12;
0x12转为二进制位 B0001 0010
其按位取反的结果为B1110 1101
于是 ~a = 0xED。
按位取反。常数c上面的波浪线是C语言中的一种公式图,波浪线是按位取反的意思。在物理学上,很多经测量得出的数值都被称为常数。
第一个%是求模的意思,也就是两个整数的除法得到的余数比如5%3=2, 1%3=1
!= 就是不等于,靠这个不说了,自己看去
是右移运算(相当于除以2),为左移同理,~按位取反,不如~3(0011)=12(1100)括号中的是2进制表示,是逻辑与,|是逻辑或,^按位运算符 异或0 ^ 1 得 1,所有的位运算是针对2进制
逻辑与,比如32=1;30=0;
是指针运算中的取地址*是取地址中的内容
sizeof是运算一个结构体或者变量等大小(字节表示)的运算符
比如char a[20] ;sizeof(a)=20; int b[20]; sizeof(b)=4*20=80
以下按波浪线的出现顺序标号:
1、char *p,定义了一个指针变量p,这个变量p中存储一个内存地址。*p表示该内存地址中的内容。那么,while(*p)表示的是该内存地址中的内容不为空(即内存地址中的内容不为0,一般情况下,一个字符数组中有内容,不为空;字符串结束时,有一个\0,即0.)时,就循环。实质上就是如果是字符就循环,遇到字符串结束,就终止循环。
2、同理,while(i=3 *p)表示当i=3,并且该内存地址中的内容不为0时,就循环。实质上就是如果是字符就循环,遇到字符串结束,就终止循环。
3、同理,if(*p),实质上就是如果是字符就执行if后面的语句,遇到字符串结束,就不执行if后面的语句。
4、b[k++]=" ";表示字符数组b中的第b[k]个字符,赋值为空格,然后k++(即k=k+1)。这条语句相当于两条语句:b[k]="";k=k+1;
5、b[k]=‘\0’;一个字符串必须以\0结束。所以,在字符数组的第k位存储一个\0。
6、ch a[60],b[80];定义了两个字符数组,a能够存储60个字符,b能够存储80个字符。需要注意的时,以上所说的60、80中包括\0在内。
7、printf("Enter a String:");gets(a);这是两条语句,可以分成两行,
printf("Enter a String:");用来显示提示信息,让用户输入一串字符
gets(a);用来接收用户的输入,并且存放到字符数组a中。
8、printf("The Original String:");puts(a);也是两条语句,显示(确认)用户输入的字符串。
9、printf("\nThe String after insert space:");显示一条信息,意思是在字符串插入空格后的内容是:。其中\n在屏幕上换行
10、puts(b);printf("\n\n");输出进行函数调用后的字符串。
特别是,解释一下字符数组与字符串的区别:
char a[60];
定义了一个字符数组,可以存储60个字符。
如果按字符串显示时,例如puts(a),并不一定能够完全按60个字符输出,可能多于60个,也可能少于60个。
因为puts(a)函数,从第一个字符开始输出,直到遇到\0时为止,也就是说,\0以后的字符不再输出。
如果a[0]为\0,则什么出不显示。如果直到a[59]也没有遇到\0,puts函数会一直反内存a[59]中以后的地址中内容输出来,一般是乱码。如果a[7]是\0,则只显示前7个字符,即a[0]到a[6]共7个。