码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-05-07 06:33:58      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

①计算机中的符号位

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

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

技术分享

 

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

  -无符号默认为正数

  -无符号数没有符号位

对于固定长度的无符号数

 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;
}

运行结果:

技术分享

 

实例程序2:

#include<stdio.h>

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

  return 0;
}

运行结果:

技术分享

 

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

标签:

原文地址:http://www.cnblogs.com/yr-linux/p/5467604.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!