以下绝大部分内容,都来自比特科技的鹏哥,我只是笔记加总结加理解再加转载。
由于无法写明原文链接,只能写原创,请谅解
- 暂时搞不目录,先凑活着看
字符串
一串字符型元素的集合
也算是数组,存放在字符数组中
字符串以’\0’结尾,但不计入字符串长度。
char arr1[]=“1bc”;
char arr2[]={‘a’,‘b’,‘c’};
printf("%s",arr1);
printf("%s",arr2);
arr1会正常打印,得到预期的abc
arr2非正常打印,得到abc,但后面还可能会出现乱码。
但
arr3{‘a’,‘b’,c’,’\0’}
会得到arr1的同样的效果。
%s以字符串打印,所需要的是要打印的字符串的地址。与%d,%c打印有差别。
字符串会自动加入’\0’。
转义字符
\ddd-----ddd表示1-3个8进制数字。
\xdd-----dd表示1-2个16进制数字。
所有字符,键盘上有的,在计算机中都以二进制的格式储存,并有一个独一无二的十进制转换编码,叫ASCII码。
strlen()函数
计算字符串长度,以字节为单位。以\0结束。
如果字符串中有转义字符,,也算一个字符,要加1.
sizeof()关键字
计算操作数的类型的长度,以字节为单位。
位操作符
& 按位与
将运算数字的二进制位进行运算。
int a=5;
int b=3;
a----0101
&
b----0011
---->0001
二进制位上,只有两个都是1,才得1.
与&&类比,两真为真,有假为假。
只要两个二进制位上有0,就得0,请全1为1.
| 按位或
int a=5;
int b=3;
a----0101
|1
b----0011
---->0111
二进制位上,只要有一个为1,结果都为1,只有都为0,才得0.
与 ||类比 ,有真为真,全假为假。
^ 按位异或
int a=5;
int b=3;
a----0101
&
b----0011
---->0110
二进制位上,只有两个位上相同,就为0,如果两个位上相异,就得1.
只要位上数相同,哪怕两个都是1,结果也是0.
~ 按位取反
int a=5;
a-----0101
~a----1010
将数的二进制位全部取返,
0–>1
1–>0
还可以用在判断条件上如
while(~scanf("%d",&a))
{}
在计算机中,如果输入错误,不满足要求。则返回一个EOF,也就是返回值为-1.
-1
原码:10000000 00000000 00000000 00000001
反码:11111111 11111111 11111111 11111110
补码:11111111 11111111 11111111 11111111
再对补码按位取反所有位,包括符号位
取反后补码:00000000 00000000 00000000 0000000
而符号位是0,表明是一个正数,而正数,原反补都一样。则返回一个0。
while(0)条件为假,会跳出循环
与
while(scanf("%d",&a)!=EOF)
{}
可以有同样的作用。
位移操作符
>>与<<
>位移位运算符
<<左位移
->>右位移
这两个操作符都是作用一个数的二进制形式。
unsigned int a=4;
int b=-4;
printf("%d",a<<2);
printf("%d",b<<2);
我们都知道,正数负数,在内存中运算都是以补码的形式进行。而正数的补码是本身的原码。负数要
原码–>反码–>补码
a
原码:00000000 00000000 00000000 00000100
反码:00000000 00000000 00000000 00000100
补码:00000000 00000000 00000000 00000100
b
原码:10000000 00000000 00000000 00000100
反码:11111111 11111111 11111111 11111011
补码:11111111 11111111 11111111 11111100
再进行位移
a左移,右边补零。
a<<2
00000000 00000000 00000000 00010000
结果是4*(2^2)=16
b>>2
补码:11111111 11111111 11111111 11111111
反码:11111111 11111111 11111111 11111110
原码:10000000 00000000 00000000 00000001
补码右移,由于是负数,最高位补1,在减1转回反码,再按位取反,但最高位不变仍为1。
结果是(-4)/(2^2)=-1
由此而论,位移操作符,<<左移,数字乘(2^要位移的个数)。
->>右移,数字/(2^要位移的个数).
单目运算符
! 逻辑反
int a=!3;
int b=!0;
得出结果是
a=0;
b=1;
! (逻辑反)可将真(非零)转变为假(0),可将假转为真(1)。
a++
++a
a–
–a
符号在前面
–a
++a
先自增,自减,再使用
符号在后面
a–
a++
先使用,再自增,自减
int a=5;
int b=a++
int c=5;
int d=++c
结果是
a=6
b=5
c=6
d=6
三目运算符
?
判断条件?结果1:结果2
如果判断条件为真,则返回值是结果1,为假,则返回值是结果2
a>b?10:5
如过a>b,则返回10,如果a<=b则,返回5.
逗号运算符
int a=(2,3,4,5,6);
a==6,在逗号运算符中,a只会是最后一个表达式的值。
内容来源于西安荣耀比特科技的比特鹏哥。
博客是为了加深自己的记忆与理解。
由于无法写明原文链接,只能写原创,请谅解