打印
[C语言]

跟着狄泰唐老师学C语言进阶教程的笔记之有符号与无符号

[复制链接]
815|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Damon_1|  楼主 | 2017-5-16 21:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
老师课程观看地址在21ic上有,发不出链接来。大家一起学习,第二课做的笔记
1.计算机中的符号位
数据类型的最高位用于标识数据的符号
A.最高位为1,表面这个数为负数
B.最高位位0,表面这个数为正数
2.有符号表示法
在计算机内部用补码表示有符号数
A.正数的补码为正数的本身
B.负数的补码为负数的绝对值各位取反后加1
8位整数 5的补码位:0000 0101
8位整数  -7的补码位:1111 1001
16位整数 20的补码位:0000 0000 0001 0100
16位整数 -13的补码位:1111 1111 1111 0011
C.C语言中用二进制代码表示(前加0b):
//-7的二进制计算过程:
//00000111(7)===>11111000(取反)===>11111001(加1)
        char c = 0b11111001;//-7
3.无符号表示法
在计算机内部用原码表示无符号数
对于固定长度的无符号数
A.MAX_VALUE+1 ——> MIN_VALUE
B.MIN_VALUE-1 ——> MAX_VALUE
4.signed和unsigned
C语言中变量默认为有符号的类型
unsigned 关键字声明为无符号类型

C语言中只有整数类型能够声明unsigned变量
当有符号和无符号进行运算时,有符号类型会自动转变为有符号类型来进行运算
int test2()
{
        unsigned int i = 5;
        int j = -10;
        if ((i + j) > 0)
        {
                printf("i+j>0\n");
        }
        else
        {
                printf("i+j<=0\n");
        }
        return 0;
}
unsigned类型错误使用案列
int test3()
{
        unsigned int i = 0;
        //i是无符号数,最小值为0,当进行减1时,会变为无符号的最大值,所以程序会进入死循环
        for (i = 9; i >= 0; i--)
        {
                printf("i=%u\n", i);
        }
        return 0;
}
5.小结
有符号用补码表示
A.正数的符号位为0
B.负数的符号位为1
无符号用原码表示
A.无符号数没有符号位
B.无符号数只用于表示正数
unsigned 只能修饰整数类型的变量
当无符号与有符号数进行计算

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

10

帖子

1

粉丝