初识C语言七(1)

文章介绍了C语言中的算术操作符,如+、-、*、/、%,以及取模运算;移位操作符>>>和<<,并解释了位移的原理;位操作符包括&、^和|,以及按位与、按位或和按位异或的概念;还讨论了赋值操作符和复合赋值符的使用,如+=、-=等;最后提到了单目操作符如!、-、++、--以及sizeof等。文章旨在帮助理解C语言中的基本操作符及其用法。
摘要由CSDN通过智能技术生成

(10)操作符(简单介绍)

算术操作符:+、-、*、/、% (%取模——指取余数)

移位操作符:>> 、<<

位操作符:&、^、|

赋值操作符:=、+=、-=、*=、/=、&=、^=、|=、>>=、<<=

举例:

int main(){

                   int a=5/2;

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

                   return 0;

}

用“/”除法得出的打印结果为商的值。(余数不会显示)

如果将int a=5/2;改为int a=5%2;(取模的打印结果为其余数),这时打印结果为“1”

移位操作符:

>>——指向右移        <<——指向左移

移位操作符移的位其实是二进制位。(移二进制位操作符)

如:int a=1;中“1”的二进制序列是如何表达呢?(把用来存放32bit位的空间叫做“a”)

“1”原本二进制是01;但是“1”放在整形a里面去了,所以整形1占4个字节——32bit位;

所以int a=1;的二进制表示为:0000...(31个0)1

而a<<1的意思就是把a的二进制序列拿起来向左移动1位。(移动整体)

如:把00001向左移,则是把右边第一个0丢弃,这时末尾应在补一个0,得00010

归纳:左边丢弃,右边补齐

因此:

 int main(){

                   int a=1;

                   int b=a<<1;————————用来接受a移动的值

                   printf("%d\n",b);

                   return 0;

}

其打印结果为“2”。

因为a<<1,整体向左移动1位,所得的二进制为“10”,转为十进制为“2”。

移动2位也是同样的意思。(a<<2,打印结果为“4”)。

再引出一个问题——不管“b”的值是多少,那“a”的值变了吗?

用printf("%d\n",a);打印结果为1,是不变的。

这说明,当我们对“a”进行左移操作的时候(a<<1),或者右移的时候,“a”本身是不变的。

除非移完之后,再次进行定义。

位操作符:这里的位指二进制位

在位操作符有“&”这个符号,叫做“按位与”

“|”——按位或                   “^”——按位异或

如:

int main(){
             int a=3;
             int b=5;
             int c=a&b;
             printf("%d\n",c);
             return 0;
}

其代码最终的打印结果为“1”

“&”按位与中的“与”是合并一起的意思。

在C语言“按位与”中,“0”表示假,“1”表示真。

3转为二进制为011;5——101

a&b——与过后其值为001

简单一点,互异为0,同为本身。

扩展:

十进制转二进制方法——凑数法【注:这里讲不清楚,具体原理大家可以自行查询。】

每一个二进制都有一定的权重值,即十进制对应的值。

用二进制给出的十进制来倒推

如:3——2+1——11               4——4+1——101

若将int c=a&b;改为int c=a|b;其打印结果为7

“按位或”指所对应的二进制序列只要有1个“1”就可以了。

当“0”和“1”相“或”的时候,只要有“1”或的结果为“1”(即遇“1”得“1”)

如:

0 1 1

1 0 1

1 1 1 ——按位或的结果

若再改为int c=a^b;(这里“^”不是次方,是“异或”),其最后的打印结果为6。

异或的计算规律:

对应的二进制相同,则为0;对应的二进制相异,则为1。

如:

0 1 1

1 0 1

1 1 0 ——异或之后的值

最后在补充,这三个&按位与、|按位或、^按位异或,这三种操作符有自己独特的运用场景。(后期详细讲解。)

赋值操作符:
一个等号(=)叫做赋值【即把值赋给一个变量】

两个等号(==)叫判断相等。【判断是否相等】

除了a=20;这样的赋值方式,其实还有另外一种——即a=a+10;这时是给a加上10再赋给a

这种写法可简化成a+=10;这两种2写法作用一样

“a+=10”这种写法是给a本身加上10。

类似的——

a=a-20; ——a-=20;

a=a*2; ——a*=2;

赋值操作符是为了简便化

这些操作符也叫复合赋值符

单目操作符:

!                   逻辑反操作
-                   负值
+                  正值
&                  取地址
sizeof           操作数的类型长度(以字节为单位)
~                   对一个数的二进制按位取反
--                   前置、后置--
++                 前置、后置++
*                   间接访问操作符(解引用操作符)
(类型)           强制类型转换
跟单目操作符相对应的有双目操作符,还有一个三目操作符。
举例:
int sum=a+b;
因为“a+b”有两个操作符,加号(+)叫做操作符,也叫双目操作符。
双目操作符是指有两个操作数。
所以,同样的单目操作符有一个操作数,三目操作符有三个操作数。
举例:
int main(){
                   int a=10;
                   printf("%d\n",a);
                   printf("%d\n",!a);
                   return 0;
}
打印结果为 10
                     0
C语言中0表示假,非0表示真。
所以a原来的值为10,非零表示真;(!——逻辑反操作)!a就是把它变成假,而假其值就为0。
而当int a=0;时,又因0是假,!a就变为真。
“真”有一个固定的值“1”
所以打印结果为——0       1
在这里“!”的意思是把真变为假,把假变为真。
负号就对值取负(为负数)——int a=-2;
                                                   int b=-b;
与负号相对应的是正号,但 通常下正号一般会省略。
int c=+3;这里正号没有实际价值。
sizeof计算的是变量/类型所占空间的大小,单位是字节。
举例:
int main(){
                  int a=10;
                  printf("%d\n",sizeof(a));
                  return 0;
}
这里也可以写成printf("%d\n",sizeof(int));
也是一样的结果,因为a跟int是整形类型×,也可以写成printf("%d\n",sizeof a);(也可以去括号);
但写成sizeof int 则会发生错误。
从中,我们可以得知sizeof算一个变量大小的时候,括号可以省略,但类型(如:int)则不可以。
sizeof来计算一个变量大小的时候,那能不能算一个数组的大小呢?
如:
int main(){
                  int arr[10]={0};//这里指10个整形元素的数组
                  printf("%d\n",sizeof(arr));
                  return 0;
}
打印结果为40
运算方法:10×sizeof(int)=40
那在sizeof计算数组大小的时候,能否计算数组的元素个数呢?
元素个数=数组总大小÷每个元素大小
如:
int main(){
                  int arr[10]={0};
                  int sz=0;
                  printf("%d\n",sizeof(arr));
                  sz=sizeof(arr)/sizeof(arr[0]);
                  return 0;
}
其打印结果为——40
                              sz=10
这里就学会了计算数组元素总个数的方法。
数组大小要拿常量来制定,变量是错误的。
可以写成:
int arr[10]={0};
或int arr[ ]={1,2,3,4,5,6,7,8,9,0}(前后知其一即可)
【注:在数组中空格与‘10’也算是元素,如:char ch[10]="hello world",但在数普通字符串长度时,‘\0’不算内容】
int arr[ ]={1,2,3,4,5,6};
arr指数组名;数组元素类型是int;数组类型不是int(数组有自己类型,但其组成的元素也有自己的类型)
这里数组类型是int[6],后期讲。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值