zoukankan      html  css  js  c++  java
  • C语言-无符号数与有符号数不为人知的秘密

    一、无符号数与有符号数

    1.计算机中的符号位

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

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

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

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     char c = -5;
     6     short s = 6;
     7     int i = -7;
     8     
     9     printf("%d
    ", ( (c & 0x80) != 0 ));
    10     printf("%d
    ", ( (s & 0x8000) != 0 ));
    11     printf("%d
    ", ( (i & 0x80000000) != 0 ));
    12     
    13     return 0;
    14 }

    2.有符号数的表示法

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

      -正数的补码为正数本身

      -负数的补码为负数的绝对值各位取反加一

    3.无符号数的表示法

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

      -无符号数默认为正数

      -无符号数没有符号位

    对于固定长度的无符号数

      -MAX_VALUE+1 ->MIN_VALUE

      -MIN_VALUE - 1 ->MAX_VALUE

    C语言中默认为有符号数类型

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

    C语言中只有整数类型能够声明unsigned变量

    当有符号数遇到无符号数时:

    实例分析:

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5  
     6     unsigned int i = 5;
     7     int j = -10;
     8     
     9     if( (i + j) > 0 )
    10     {
    11         printf("i + j > 0
    ");
    12     }
    13     else
    14     {
    15         printf("i + j <= 0
    ");
    16     }
    17     
    18     return 0;
    19 }

    有符号数要转换成无符号数

    错误使用unsigned

    实例分析2:

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5  
     6     unsigned int i = 0;
     7     
     8     for(i=9; i>=0; i--)
     9     {
    10         printf("i = %u
    ", i);
    11     }
    12     
    13     return 0;
    14 }

    小结:

    有符号数用补码表示

      -正数的符号位为0 

      -负数的符号位为1

    无符号数用原码表示

      -无符号数没有符号位

      -无符号数只有表示正数

    unsigned只能修饰整数类似的变量

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

  • 相关阅读:
    Golang :索引值对的数组
    MySql-BlackHole:黑洞引擎
    golang fmt 中的 Sprintf、Fprintf和 Printf函数
    golang 中的 rune 和 byte
    mysql 全文索引
    Python 原始字符串
    如何给博客园(或者CSDN)设置域名访问
    CPU、内存、磁盘三者的关系
    018.redis 阶段性总结:1T 以上海量数据+10 万以上 QPS 高并发+ 99.99% 高可用
    017.redis 在实践中的一些常见问题以及优化思路(包含 linux 内核参数优化)
  • 原文地址:https://www.cnblogs.com/lemaden/p/10081407.html
Copyright © 2011-2022 走看看