有符号数和无符号数
C语言中:
· signed 关键字声明变量为有符号类型
· unsigned 关键字声明变量为无符号类型
注意: C语言中只有整数类型能够声明unsigne变量
有符号数和无符号数的分析1:表示法
有符号数(signed):
· 在计算机内部用补码表示有符号数
—最高位为 0, 表示这个数为正数
—最高位为 1, 表示这个数为负数
正数的补码为正数本身
负数的补码为负数的绝对值取反加 1
例:
8位整数 6 的补码为: 0000 0110
8位整数 -6 的补码为 : 1111 1010
16位整数 16 的补码为: 0000 0000 0001 0000
16位整数 -16 的补码为: 1111 1111 1111 0000
无符号数(unsigned):
· 在计算机内部用原码表示无符号数
-无符号数没有符号位, 只用于表示正数
有符号数和无符号数的分析2:取值范围
有符号数(signed):
· 因最高位为符号位
8位有符号数取值范围:-2^7————2^7 - 1
16位有符号数取值范围:-2^15————2^15 - 1
32位有符号数取值范围:-2^31————2^31 - 1
无符号数(unsigned):
· 无符号数只表示正数
8位无符号数取值范围:0————2^8 - 1
16位无符号数取值范围:0————2^16 - 1
32位无符号数取值范围:0————2^32 - 1
有符号数和无符号数的分析3:有符号数遇上无符号数
· 先上代码
#include <stdio.h>
int main()
{
int i = -10;
unsigned j = 5;
if((i + j) > 0)
{
printf("i + j > 0\n");
}
else
{
printf("i + j <= 0\n");
}
return 0;
}
运行结果为
i + j > 0
结论:
- 无符号数与有符号数混合运算时,编译器会将有符号数转化为无符号数后再进行运算,结果为无符号数
- 因此需小心使用unsigned关键字
本文是关于C语言中有符号数(signed)和无符号数(unsigned)的学习笔记,详细介绍了它们的表示法、取值范围以及在混合运算时的规则。有符号数使用补码表示,无符号数使用原码表示。在混合运算时,有符号数会被转换为无符号数进行计算,可能导致意外的结果,因此在编程中需要注意类型转换。

879

被折叠的 条评论
为什么被折叠?



