在C语言中,signed/unsigned用于修饰整数变量,signed表示有符号的,unsigned表示无符号的。 今天就带大家了解一下 关键字signed和unsigned 。
1、signed
sign的本意是“标记,做记号”,ed后缀有一种完成时的感觉,这里表示的是有符号的。
signed关键字是ISO/ANSI C90标准新增的,其常见于整数类型的符号规定处 。
signed的作用是:声明有符号类型的整数类型。
其实说signed很常见也不见得,因为我们常用的int、short和long,以及long long,默认情况下都是signed有符号的
所以相比起来unsigned的戏份可能比signed更多,signed在这里只是相当于刻意地去说明其后面的变量是有符号类型的
signed int a; /* 通常这里带signed的变量定义都可以省略掉signed,因为signed本身就是默认的 */
signed short int b;
signed short c;
signed long int d;
signed long e;
signed long long f;
unsigned int g; /* 写上signed后,上面的定义似乎在刻意地大声说“上面这些变量应该是有符号的” */
unsigned short h; /* 但一般unsigned的戏份还是比signed多,signed关键字和auto关键字的宿命类似 */
有符号数在计算机中的的表示方法:在计算机内部,是用补码表示有符号数
-正数的补码是其本身
-负数的补码为负数的绝对值得各个位取反加1
举个例子:
8位整数 5的补码为:0000 0101
8位整数 -7的补码为:取绝对值|-7| = 7 --> 二进制为 0000 0111 --> 各个位取反 1111 1000 -->最后加1 -->1111 1001,所 以-7在计算机中就表示为1111 1001。