【C语言】 操作符(上): -- 算数 -- 移位 -- 位操作符 -- 赋值 -- 单目 -- 关系 -- 逻辑操作符1

简介: 【C语言】 操作符(上): -- 算数 -- 移位 -- 位操作符 -- 赋值 -- 单目 -- 关系 -- 逻辑操作符1

************************************************正文开始***********************************************

1、算数操作符

算术操作符:+、-、*、/、%

1.除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数;

2.对于 / 操作符如果两个数都为整数,执行整数除法,而只要有浮点数执行的就是整数除法;

3.% 操作符的两个操作数必须为整数,返回的是整除之后的余数。

我们看看代码来对这三点加深印象:

我们先来看 / 和 % :

#include <stdio.h>
int main()
{
    //  / 除法 - 得到的是商
    //  % 取模(取余)- 得到的是余数
    printf("%d\n", 10/2.0);
    printf("%lf\n", 10/3.0);
    printf("%d\n", 10/2.0);
    printf("%d\n", 10%2);
    return 0;
}

效果展示:


第三行打印怎么不是 5 呢,我们来分析一下:



因此应该使用 %lf 打印。

我们对代码进行改正:

#include <stdio.h>
int main()
{
    //  / 除法 - 得到的是商
    //  % 取模(取余)- 得到的是余数
    printf("%d\n", 10/2);
    printf("%lf\n", 10/3.0);
    printf("%lf\n", 10/2.0);
    printf("%d\n", 10%2);
    return 0;
}

效果展示:


这个例子就是验证了第二条:对于 / 操作符如果两个数都为整数,执行整数除法,而只要有浮点数执行的就是整数除法。

我们再来看看 % :

这里就印证了第三条:% 操作符的两个操作数必须为整数,返回的是整除之后的余数。

2、移位操作符

<< 左移操作符


>> 右移操作符


注:移位操作符的操作数只能是整数。移动的是二进制的位。


10进制的数据中:都是0~9的数字组成的;


8进制的数据中:都是0~7的数字组成的;


2进制的数据中:都是0~1的数字组成的。


10进制的数字都有自己的权重,比如 123:



2进制的数字也是一样有自己的权重,比如 1010:



8进制的数字也是一样,比如 12:

16进制(范围:0~15)的每一位:0 1 2 3 4 5 6 7 8 9 A B C D E F

因此,16进制表示10就是 A。

2.1 原码、反码、补码

整数:

整数的二进制表示形式有 3 种方式:原码、反码、补码

原码:把一个数按照正负直接翻译成二进制就是原码。

反码:符号位不变,其他位按位取反。

补码:反码 +1。
注:正整数的原码反码补码是相同的。(正整数写出原码就是反码和补码。负整数的原反补码需要根据以上规律计算)


举例:写出 5,-5的原码、反码、补码


5,-5是整数,整数是存放在整型变量中的,一个整型变量是 4 个字节 -- 32个比特位。


我们以 32 位来描述 5,5 用二进制表示为 101(这已经是3个比特位了),高位我们用 0 来补齐。因此5的二进制表示为:


00000000 00000000 00000000 00000101


注:第一个 0 表示的是最高位,最高位是符号位,正数的符号位表示为 0,负数的符号位表示为 1。


因为 -5 的二进制表示为:


10000000 00000000 00000000 00000101


5的原、反、补码:


00000000 00000000 00000000 00000101


-5的原、反、补码:


原码:10000000 00000000 00000000 00000101


反码:11111111 11111111 11111111 11111010


补码:11111111 11111111 11111111 11111011


整数在内存中存储的是补码二进制。


我们验证一下:

#include <stdio.h>
int main()
{
    int a = -5;
    printf("%d\n", a);
    return 0;
}

内存中的 -5 存储展示:


我们来分析一下为什么是这样

内存中是以十六进制存储的,f 代表了 15。

编译器中是反着存的,所以是 fb ff ff ff 。这就验证了,二进制在内存中存的是补码。

相关文章
|
10天前
|
C语言
C语言学习记录——操作符习题、算数转换习题,多解法&优解法&单选题
C语言学习记录——操作符习题、算数转换习题,多解法&优解法&单选题
10 1
|
10天前
|
编译器 C语言
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)二
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)二
16 3
|
10天前
|
存储 编译器 C语言
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)一
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)一
17 1
|
10天前
|
C语言
C语言算数运算符和算数表达式详解
C语言算数运算符和算数表达式详解
10 0
|
17天前
|
C语言
C语言中的逻辑运算符和逻辑表达式
C语言中的逻辑运算符和逻辑表达式
18 0
|
18天前
|
编译器 C语言 C++
从C语言到C++_33(C++11_上)initializer_list+右值引用+完美转发+移动构造/赋值(下)
从C语言到C++_33(C++11_上)initializer_list+右值引用+完美转发+移动构造/赋值
20 1
|
C语言
《啊哈C语言!逻辑的挑战(修订版)》| 每日读本书
“用编程轻松提升逻辑力!每个人都应该学习如何编程,因为它教会你如何思考。——史蒂夫.乔布斯” 。每日搜罗最具权威专业书籍,更多图书请关注“每日读本书”。
3174 0
|
2天前
|
算法 Unix Linux
C语言随机数的产生(rand、srand、time函数细节讲解)
C语言随机数的产生(rand、srand、time函数细节讲解)
|
1天前
|
安全 C语言
【C语言基础】:内存操作函数
【C语言基础】:内存操作函数
|
1天前
|
编译器 C语言 C++
【C语言基础】:字符函数和字符串函数-2
【C语言基础】:字符函数和字符串函数