zoukankan      html  css  js  c++  java
  • 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
    ",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("是否有房?
    ");
        scanf("%d",&hasHouse);
    
        printf("是否有车?
    ");
        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
    ",4 && 2); // 1
    
        printf("%d
    ",4 & 2); // 0 换算成二进制 0000-0100 0000-0010 与运算之后得到 0000-0110
    
        printf("%d
    ",4 | 2); // 6 换算成二进制 0000-0100 0000-0010 或运算之后得到 0000-0110
    
        printf("%d
    ",4 ^ 2); // 6 换算成二进制 0000-0100 0000-0010 位异或运算之后得到 0000-0110
    
        printf("%d
    ",~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的符号以及两个编码的问题。

  • 相关阅读:
    JS变量的作用域
    使用jquery修改css中带有!important的样式属性
    js异步加载的三种解决方案
    js 停止事件冒泡 阻止浏览器的默认行为(阻止超连接 # )
    【翻译】MongoDB指南/CRUD操作(二)
    【翻译】MongoDB指南/CRUD操作(一)
    【翻译】MongoDB指南/引言
    深入浅出UML类图(一)
    让thinkphp 5 支持pathinfo 的 nginx ,去掉index.php
    linux 常用命令
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/7840051.html
Copyright © 2011-2022 走看看