zoukankan      html  css  js  c++  java
  • 有符号和无符号数

    有符号和无符号

    计算机中的符号位

    数据类型的最高位用于标识数据的符号

    • 最高位为1,表明这个数为负数

    • 最高位为0,表明这个数为正数

    
    int sign = 0;
    
    char i = -5;
    
    short j = 5;
    
    int k = -1;
    
    sign = (i & 0x80);               // sign 不等于0
    
    sign = (j & 0x8000);           // sign 等于0
    
    sign = (k & 0x80000000);     // sign不等于0
    
    

    有符号数的符号位

    
    
    #include <stdio.h>
    
    int main(int argc, char const *argv[])
    
    {
    
        char c = -5;
    
        short s = 6;
    
        int i = -7;
    
    
    
    
        printf("%d
    ",(c & 0x80) != 0);
    
        printf("%d
    ",(s & 0x8000) != 0);
    
        printf("%d
    ",(i & 0x80000000) != 0);
    
    
    
    
        return 0;
    
    }
    
    

    结果:

    1

    0

    1

    正数的最高位为0,负数的最高位为1

    有符号数的表示法

    在计算机内部用补码表示有符号数

    • 正数的补码是正数本身

    • 负数的补码是负数的绝对值各位取反后加1

    无符号数的表示法

    • 在计算机内部原码表示无符号数

      • 无符号数默认为正数

      • 无符号数没有符号位

    • 对于固定长度的无符号数

      • MAX_VALUE+1 ---> MIN_VALUE

      • MIN_VALUE-1 ---->MAX_VALUE

    signed 和 unsigned

    • C语言中变量默认为有符号类型

    • unsigned 关键字声明变量为无符号类型

    C语言中只有整数类型能够声明unsgined 类型

    当无符号数遇到了有符号数

    #include <stdio.h>
    
    int main(int argc, char const *argv[])
    
    {
    
        unsigned int i = 5;
    
        int j = -10;
    
        if((i + j)>0)
    
        {
    
            printf("i + j > 0
    ");
    
        }
    
        else
    
            printf("i + j < 0
    ");
    
        return 0;
    
    }
    
    

    结果:

    i + j > 0

    有符号数将被看做有符号数

    错误的使用unsigned

    #include <stdio.h>
    
    int main(int argc, char const *argv[])
    
    {
    
        unsigned int i = 0;
    
        for(i=9;i>=0;i--)
    
        {
    
            printf("i = %u
    ",i);
    
        }
    
        return 0;
    
    }
    
    

    此程序会一直运行

    总结:

    • 有符号数用补码表示

    • 无符号数用原码表示

    • unsigned 只能修饰整数类型的变量

  • 相关阅读:
    ajax GET 传输中文乱码
    php 验证码 图像存在错误 无法显示 解决方法
    ajax 简单实例
    PHP continue break 区别 用法
    php注意事项
    php7注意事项
    腾讯2015后台模拟题
    【leetcode】_3Sum
    最小的k个数 2.5
    《Hadoop权威指南》笔记 第三章 并行复制及存档
  • 原文地址:https://www.cnblogs.com/yanyun888/p/6060991.html
Copyright © 2011-2022 走看看