• signed int与usigned int转换(有符号变量与无符号变量)


    • 数据存储方式
      • 计算机中数据都是以二进制进行存储的  正数为原码形式,负数为二进制补码形式
      • 假定以字长为两个字节的机器为例int a=7
      • signed int a=7    存储方式:0000 0000 0000 0111
      • signed int a=-7   存储方式: 1111 1111 1111 1001
      • unsigned int a=7 存储方式:0000 0000 0000 0111
      • -1是最大的负整数,转换成正整数也是最大的
    • 实例代码
      •  1 #include <stdio.h>  
         2   
         3 char getChar (int x,int y)  
         4 {  
         5     char c;   
         6     unsigned int a = x;  
         7   
         8     (a+y > 10) ? (c = 1): (c = 2);  
         9   
        10     return c;  
        11 }   
        12   
        13 int main (void)  
        14 {  
        15     char c1 = getChar(7,4);  
        16     char c2 = getChar(7,-7);  
        17     char c3 = getChar(7,-8);  
        18     char c4 = getChar(-6,7);  
        19       
        20     printf("c1 = %d
        ",c1);  
        21     printf("c2 = %d
        ",c2);  
        22     printf("c3 = %d
        ",c3);  
        23     printf("c4 = %d
        ",c4);  
        24       
        25     return 0;  
        26 }  

        运行结果:c1=1,c2=2,c3=2,c4=1;

      • 当表达式中同时存在有符号类型与无符号类型时,所有的操作数都将自动转换成无符号类型
        •   c3分析
        • y将自动转换成无符号类型
        • y=-7在计算机中的存储为1111 1111 1111 1001    a=7存储为0000 0000 0000 0111
        • a+y=0000 0000 0000 0000  溢出  所以值为0
        • c4分析
        • y=-8存储为 1111 1111 1111 0111     a=7存储为0000 0000 0000 0111
        • a+y=1111 1111 1111 1111  即最大的整数   肯定大于10  所以c4=1;
  • 相关阅读:
    Spring Bean的生命周期
    使用docker安装虚拟机并打开ssh连接
    查看/设置JVM使用的垃圾收集器
    使用Apollo动态修改线上数据源
    java8之lambda表达式
    Java8之Stream
    @Bean 的用法
    Java中的Filter过滤器
    详解tomcat的连接数与线程池
    什么是ClassLoader
  • 原文地址:https://www.cnblogs.com/southcyy/p/10147471.html
Copyright © 2020-2023  润新知