操作符详解(1)

简介: 操作符详解(1)

一、算术操作符

  • /除法的注意事项:若/两端的操作数都是整数,执行整除法;若想得到小数,则要保证除数和被除数至少有一个是浮点数,并且用double/float定义。
  • %取模操作的注数意事项:必须要保证取模两端都是整数

二、移位操作符

1、右移操作符:

分为算术右移(右边丢弃,左边符号位),和逻辑右移(右边丢弃,左边补0),注意我们在使用时,大部分都是算术右移

例:对-1进行右移操作,打印输出结果还是-1.



原理:整数在存储时,用的都是补码,但正数的原码补码反码三码相同。

负数处处时是补码,所以对其进行操作时,都是对补码进行操作,但我们使用、打印的都是原码,因此需要将反码进行转换。

灵魂总结:在对负数进行移位操作时先将负数的原码转换为补码,然后对补码进行操作,最后打印时,再将操作之后的补码转换成原码打印。

TIP: 按位取反和原码到反码的区别:

按位取反包含符号位,而原码到反码,符号位不变,其余位按位取反!  

右移一位,数字会除2

2、左移操作符

数字会乘2

左边丢弃,右边补0

警告:不能移负数位,这是一种未定义行为。

只适用于整数

image.png

三、按位操作符

看第一次笔记


四、一道恶心的面试题

不创建临时变量,交换两个数的值

1、法一:加减法

image.png

缺陷:可能会溢出,因为整型只占4个字节,若数字的值过大,就会溢出

2、法二:异或法(相同为0,相异为1)

image.png

可以形象地将第一个a^b输出的结果当成密码,然后将这个密码分别与原来的a,b进行异或,可得出结果

缺陷:此代码也有缺陷,其一运行效率不高,其二代码可读性低


五、练习一

求一个整数存储在二进制位中1的个数,即求补码中1的个数

关键:如何求一个数的二进制位的最后一位?进而利用移位操作符求出这个数的每一项是否为1

解:可以将这个数&1,因为1=00000000000000000000000000000000000001,若结果为1,说明最后一位是1,其余位按位取反后因为有0,所以直接变为0

原理:按位与,将两个数进行比较,若有一个数为0,则&按位与的结果就是0

image.png

TIP:在求个数时,通常会使用到count++


练习二逐个输出123的数字

有一个通式:先%10,后/10,直到结果为0


六、单目操作符

sizeof 计算变量所占内存空间的大小,单位是字节、

image.png

数组一样有类型,去掉数组名,剩下的就是类型

相关文章
|
2月前
|
存储 C++
C/C++中位操作符(&,|,^,~)的详解使用
C/C++中位操作符(&,|,^,~)的详解使用
|
9月前
|
存储 索引
【操作符】
【操作符】
25 0
|
10天前
|
编译器 C语言
操作符详解(1)
操作符详解(1)
16 0
|
17天前
|
索引
操作符,详细讲解
操作符,详细讲解
|
2月前
|
存储 C语言
操作符详解2(一)
C语言操作符具有优先级和结合性,决定表达式求值顺序。优先级高的运算符先执行,相同优先级时看结合性,左结合从左到右,右结合从右到左。例如,3+4*5中乘法优先级高于加法,5*6/2中乘法和除法优先级相同,但都是左结合,所以先计算5*6。圆括号具有最高优先级,可改变其他运算符优先级。表达式求值时,整型运算以缺省整型精度进行,小整型值会被提升为int或unsigned int。正数提升时高位补0,负数提升时高位补1,无符号整型提升始终补0。
30 0
|
11月前
|
编译器 C语言 索引
S5——C操作符详解,你都知道吗? 下
讲解主要内容: 1. 各种操作符的介绍 2. 表达式求值 以下让我们开始正式重新认识和理解操作符吧!
|
11月前
|
C语言 索引
【C】操作符详解
今天给大家带来一篇关于C语言操作符的详细介绍,在C语言中操作符主要有以下几种:
|
12月前
|
C语言 索引
详解操作符(中)
详解操作符(中)
|
12月前
|
编译器
详解操作符(上)
详解操作符(上)
|
存储
操作符(详解)
操作符(详解)
121 0