二.有符号数与无符号数

计算机中的符号位

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

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

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

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

正数的补码为正数本身

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

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

无符号数默认为正数

无符号数没有符号位

4.对于固定长度的无符号数

MAX_VALUE + 1 -> MIN_VALUE

MIN_VALUE - 1->MAX_VALUE

5.signed 和unsigned 

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

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

unsigned 关键字只能修饰整数类型的变量

例子一

#include <QCoreApplication>
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
    unsigned int i  = 6;
    int j = -12;
 
    if ( (i+j) > 0)
    {
        printf(" i + j > 0\n");
    }
    else
    {
        printf(" i + j < 0\n");
    }
    return a.exec();
}
该程序输出的结果是什么?

结果为 i+j> 0 原因: 当无符号数和有符号数混合计算时,会将有符号数转换为无符号数后再进行计算,结果为无符号数。

例子二:

/*
 * 错误的使用 unsigned int 为循环变量
*/
void example2()
{
    unsigned int i = 0;
 
    for(i = 9 ; i >= 0; --i)
    {
        printf("i = %u\n",i);
    }
 
}
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
    example2();
 
    return a.exec();
}
输出结果:一直循环的打印下去,原因 无符号数的最小值为0  当 0 在减1 时变为一个最大数,导致循环 条件一直满足
发布了206 篇原创文章 · 获赞 18 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/lvmengzou/article/details/104221967