C语言入门知识点(一部分)

以下绝大部分内容,都来自比特科技的鹏哥,我只是笔记加总结加理解再加转载。
由于无法写明原文链接,只能写原创,请谅解

  • 暂时搞不目录,先凑活着看

字符串
一串字符型元素的集合
也算是数组,存放在字符数组中
字符串以’\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只会是最后一个表达式的值。

内容来源于西安荣耀比特科技的比特鹏哥
博客是为了加深自己的记忆与理解。
由于无法写明原文链接,只能写原创,请谅解

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值