C语言进阶剖析第二课--有符号和无符号

时间:2022-09-14 00:49:18

①计算机中的符号位

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

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

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

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

正数的补码为正数本身;

负数的补码为负数的绝对值各位取反再加1;

 

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

  -无符号默认为正数

  -无符号数没有符号位

对于固定长度的无符号数

 MAX_VALUE + 1 =  MIN_VALUE

MIN_VALUE - 1 = MAX_VALUE

如果无符号数和有符号数相加,有符号数会转成无符号数,并且如果有符号数是负数,那么这个数将会是一个很大的数,并且计算结果是一个无符号数。

 

 

 

计算机中的符号位

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

  -最高位为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

 

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

正数的补码为正数本身;

负数的补码为负数的绝对值各位取反再加1;

C语言进阶剖析第二课--有符号和无符号

 

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

  -无符号默认为正数

  -无符号数没有符号位

对于固定长度的无符号数

 MAX_VALUE + 1 =  MIN_VALUE

MIN_VALUE - 1 = MAX_VALUE

 

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

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

 

整数类型能用unsigned来声明,但是浮点数不能用unsigned声明

 

相互之间的转换:

如果无符号数和有符号数相加,有符号数会转成无符号数,并且如果有符号数是负数,那么这个数将会是一个很大的数,并且计算结果是一个无符号数。

示例程序1:

#include <stdio.h>

int main()
{
 
    unsigned int i = 5;
    int j = -10;
    
    if( (i + j) > 0 )
    {
        printf("i + j > 0\n");
    }
    else
    {
        printf("i + j <= 0\n");
    }
    
    return 0;
}

运行结果:

C语言进阶剖析第二课--有符号和无符号

 

实例程序2:

#include<stdio.h>

int main() { unsigned int i = 0; for(i>9; i>=0; i--) { printf("%u\n",i); } 
  return 0;
}

运行结果:

C语言进阶剖析第二课--有符号和无符号