c语言中类型转换与赋值运算符、算术运算符、关系运算符、逻辑运算符。原码、反码、补码。小解。

简介:

类型转换

自动转换

小范围的类型能够自动转换成大范围的类型。short->int->long->float->double

强制类型转换

(类型名)变量或数值

#include <stdio.h>
#include <stdlib.h>

// standared 标准
// input output 输入/输出
// header 头 .h头文件

int main() // 返回int,如果是void表示没有返回
{
    // 大类型就相当于把一瓶酒中的水,倒入酒盅里,会洒

    double num = 6; // 小类型转大类型 - 自动类型转换
    int    num1=(int)num;// 大类型转小类型,损失精度 - 强制类型转换

    return 0;
}

运算符和条件结构

赋值运算符、算术运算符、关系运算符、逻辑运算符

表达式是由一系列[操作符](operators)和[操作数](operands)组成的。

赋值运算符

=、+=、-=、*=、/=、%=

#include <stdio.h>
#include <stdlib.h>

// standared 标准
// input output 输入/输出
// header 头 .h头文件

int main() // 返回int,如果是void表示没有返回
{

    // 复合运算符
    int num = 8;
    num %= 5;  // num = 8 % 5;
    printf("%d",num); // 3

    return 0;
}

算术运算符

一元:++、--

二元:+、-、*、/、%

关系运算符

> 、<

>=、<=

== 、 !=

#include <stdio.h>
#include <stdlib.h>

// standared 标准
// input output 输入/输出
// header 头 .h头文件

int main() // 返回int,如果是void表示没有返回
{

    // 关系运算符
    int num1 = 5;
    int num2 = 8;
    int result = num1>num2;
    printf("%d\n",result); // 0

    return 0;
}

老九语录,在高级语言中才有true、false。c语言中没有这玩意。学习C语言能够增加大家的内功。

逻辑运算符

|| && !

#include <stdio.h>
#include <stdlib.h>

// standared 标准
// input output 输入/输出
// header 头 .h头文件

int main() // 返回int,如果是void表示没有返回
{

    // 逻辑运算符
    int hasHouse; // 有房吗
    int hasCar;   // 有车吗

    printf("是否有房?\n");
    scanf("%d",&hasHouse);

    printf("是否有车?\n");
    scanf("%d",&hasCar);

    if (hasHouse && hasCar) {
        printf("可以结婚");
    } else {
        printf("不可以结婚");
    }

    return 0;
}

位运算符(转换为二进制进行计算)

&

|

~

^

<<

>>

#include <stdio.h>
#include <stdlib.h>

// standared 标准
// input output 输入/输出
// header 头 .h头文件

int main() // 返回int,如果是void表示没有返回
{

    // 逻辑运算符,位运算符
    printf("%d\n",4 && 2); // 1

    printf("%d\n",4 & 2); // 0 换算成二进制 0000-0100 0000-0010 与运算之后得到 0000-0110

    printf("%d\n",4 | 2); // 6 换算成二进制 0000-0100 0000-0010 或运算之后得到 0000-0110

    printf("%d\n",4 ^ 2); // 6 换算成二进制 0000-0100 0000-0010 位异或运算之后得到 0000-0110

    printf("%d\n",~4); // -5 换算成二进制 0000-0100 非运算之后得到 1111-1011(补码 -5) 原码10000101 反码11111010 补码11111011


    return 0;
}

原码(原码就是符号位加上真值的绝对值, 即用第一位表示符号,其余位表示值)、反码(正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反)、补码(正数的补码就是其本身,负数的补码是在其原码的基础上,符号位不变, 其余各位取反,最后+1。【即在反码的基础上+1】)。

[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补

既然原码才是被人脑直接识别并用于计算表示方式,为何还会有反码和补码呢?

因为人脑可以知道第一位是符号位, 在计算的时候我们会根据符号位, 选择对真值区域的加减。 但是对于计算机, 加减乘数已经是最基础的运算, 要设计的尽量简单。计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂!于是人们想出了将符号位也参与运算的方法。 我们知道,根据运算法则减去一个正数等于加上一个负数。即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法,这样计算机运算的设计就更简单了。

原码计算: 1-1=0

1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2

得到的结果是不正确的。

反码计算: 1-1=0

1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0

发现用反码计算减法,结果的真值部分是正确的。而唯一的问题其实就出现在"0"这个特殊的数值上。 虽然人们理解上+0和-0是一样的,但是0带符号是没有任何意义的。而且会有[0000 0000]原和[1000 0000]原两个编码表示0。

补码计算: 1-1=0

1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原 = 0

补码的出现解决了0的符号以及两个编码的问题。



本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/7840051.html,如需转载请自行联系原作者

相关文章
|
存储 C语言 C++
【c语言】运算符汇总(万字解析)
今天博主跟大家分享了c语言中各种操作符的功能、使用方法以及优先级和结合性,并且与大家深入探讨了表达式求值的两个重要规则--算数转换和整形提升。学习这些知识对我们的C语言和C++学习都有着极大的帮助。
1248 2
|
C语言
C 语言中所有可用的关系运算符
C 语言中所有可用的关系运算符。
267 82
|
人工智能 Java 程序员
一文彻底搞清楚C语言的运算符
本文详细介绍了C语言中的各类运算符,包括算术、关系、逻辑、位运算符、赋值、三目运算符及sizeof,帮助读者深入理解其用法与特性。君志所向,一往无前,希望在成长的路上有你相伴!
1726 2
一文彻底搞清楚C语言的运算符
|
C语言
C语言判断和运算符联系
在 C 语言中,判断与运算符紧密相关,主要体现在条件表达式的使用上。
466 87
|
安全 C语言
C语言运算符的使用注意点
在C语言中,正确使用运算符能提升代码的可读性和效率。本文介绍了八大注意事项:运算符优先级和结合性影响运算顺序;自增/自减运算符分前缀和后缀形式;逻辑运算符有短路特性;位运算符直接操作二进制位需谨慎;条件运算符简洁但避免复杂嵌套;类型转换避免意外结果;使用括号明确运算顺序。掌握这些要点有助于编写更安全高效的代码。
647 72
|
C语言
【C语言】关系运算符详解 - 《后宫那些事 ! 》
关系运算符在C语言中扮演着重要角色,它们用于比较两个操作数,并在控制结构中进行条件判断。通过理解和掌握这些运算符,您可以更有效地编写和调试C语言程序。
718 7
|
C语言
【C语言】条件运算符详解 - 《 A ? B : C 》
条件运算符(也称为三元运算符)是C语言中唯一的三元运算符。它通常用于替代简单的 `if-else` 语句。
1509 6
|
C语言
【C语言】原码、反码、补码详解 -《码上有道 ! 》
在计算机科学中,整数的表示方式有多种,包括原码、反码和补码。这些表示方式主要用于解决整数的二进制表示和计算问题。本文将详细介绍这三种表示方法,并通过示例来说明它们的原理和应用,特别是它们在C语言中的应用。
2924 5
|
C语言
c语言运算符
C的运算符有以下几种: 算术运算符:+、-、*、/、% 结合方向自左向右 关系运算符:>、<、==、>=、<=、!= 逻辑运算符:!、&&、|| 位运算符<<、>>、~、|、^、& 赋值运算符:=及符号扩展赋值运算符(+=、-=、*=、/=) 条件运算符:? : 逗号运算符:, 指针运算符:*、& 求字节运算符:sizeof 强制类型转换运算符:((类型)) 分量运算符:.、-> 下标运算符:[]
276 4
C语言------运算符与表达式
这篇文章是C语言运算符与表达式的实训教程,通过多个示例程序展示了如何使用算术运算符、关系运算符、逻辑运算符以及条件语句来解决实际问题,并介绍了如何通过函数库简化复杂数学运算。
C语言------运算符与表达式