老师课程观看地址在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 只能修饰整数类型的变量
当无符号与有符号数进行计算 |