zoukankan      html  css  js  c++  java
  • 1 有符号与无符号

    计算机中的符号位

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

      • 最高位为1,表明这个数为负数
      • 最高位为0,表明这个数为正数
    • 有符号数的符号位

      #include <stdio.h>
      
      int main()
      {
          int sign = 0;  //符号位
      
          char i = -5;
          short j = 5;
          int k = -1;
      
          sign = i & 0x80;  //sign 不等于 0 : sign = (1011) & (1000 0000) 
          printf("sign = %d
      ",sign);
      
          sign = j & 0x8000;  //sign 等于 0
          printf("sign = %d
      ",sign);
      
          sign = k & 0x80000000;  //sign 不等于 0 : sign = (1111 1111 1111 1111 1111 1111 1111 1111) & (1000 0000 0000 0000 0000 0000 0000 0000) = 1000 0000 0000 0000 0000 0000 0000 0000
          printf("sign = %d
      ",sign);
      
          return 0;
      }
      
      //输出结果
      sign = 128
      sign = 0
      sign = -2147483648##
      

    有符号数的表示法

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

      • 正数的补码为正数本身

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

      • 8位整数5的补码为:0000 0101

        8位整数-7的补码为:1111 1001

      • 16位整数20的补码为:0000 0000 0001 0100

        16位整数-13的补码为:1111 1111 1111 0011

    无符号数的表示法

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

      • 无符号数默认为正数
      • 无符号数没有符号位
    • 对于固定长度的无符号数

      • MAX_VALUE+1 -> MIN_VALUE
      • MIN_VALUE-1 -> MAX_VALUE

    signed 和 unsigned

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

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

      • C语言中,只有整数类型能够声明 unsigned 变量
      #include <stdio.h>
      
      int main()
      {
          int i;  //默认为带符号整型
          signed int j;  //显式声明变量为带符号整型
          unsigned int k;  //声明变量为无符号整型
      
          return 0;
      }
      
    • 当无符号数遇见有符号数

      • 当无符号数与有符号数混合计算时,会将有符号数转换为无符号数后再进行计算,结果为无符号数

      • Demo1

        • 计算 i+j 时,先将 int 型变量 j 转换为 unsigned int
        #include <stdio.h>
        
        int main()
        {
            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
        
      • Demo2

        • 无限循环下去,因为变量 i 的值一直是无符号数,不会出现小于 0 的情况
        #include <stdio.h>
        
        int main()
        {
         
            unsigned char i = 0;
            
            for(i=9; i>=0; i--)
            {
                printf("i = %u
        ", i);
            }
            
            return 0;
        }
        
  • 相关阅读:
    jps, jstack, jmap, jhat, jstat
    SpringBoot工程可执行jar修改为可执行war
    SCP后台运行
    frp实现内网远程访问
    SpringBoot项目执行脚本, 自动拉取最新代码并重启
    文本聚合函数(wm_concat, listagg, group_concat, string_agg)
    linux磁盘空间占用分析
    jdbc打印sql语句-p6spy配置
    Linux系统的buff/cache缓存清理脚本
    环境变量及免密登录
  • 原文地址:https://www.cnblogs.com/bky-hbq/p/13582412.html
Copyright © 2011-2022 走看看