[C关键字]介绍第四弹—— signed、unsigned
2014-11-01 18:16
288 查看
第2篇:
signed、unsigned
有没有符号――signed、unsigned关键字
我们知道计算机底层只认识0、1.任何数据到了底层都会变计算转换成0、1.那负数怎么存储呢?
肯定这个“-”号是无法存入内存的,怎么办?很好办,做个标记。把基本数据类型的最高位腾出来,用来存符号,同时约定如下:最高位如果是1,表明这个数是负数,其值为除最高位以外的剩余位的值添上这个“-”号;如果最高位是0,表明这个数是正数,其值为除最高位以外的剩余位的值。
我们的signed关键字也很宽恒大量,你也可以完全当它不存在,编译器缺省默认情况下数据为signed类型的。
然而,负数并不仅仅是简单的以符号+数据存储的。而是通过一种叫做补码的形式来存储。补码就是通常所说的:按位取反再加一。为什么要这样设计呢?
为什么要用补码?
下面我来解释一下为什么补码可以实现减法当做加法。
我们假设一个数字A,它的正数表示,我们称为”正”,它的相反数,我们称为”负”,我们知道:
负 +正
= 0
在计算机做加法的时候,如果最高位(符号位)有进位,则进位被舍弃。我们可以利用溢出,来让两个数相加结果变成0。(这里假设只有1个Byte)
负 +正
= 1 0000 0000 (这里是二进制表示)
这里,如果1这个位置是溢出了,因此计算机直接丢掉最高位1,变成:
负 +正
= 0;
我们假设,数字A的正数表示形式按位取反结果为”反”,很容易知道:
正 +反
= 1111 1111
正 +反
+ 1 = 1 0000 0000
右边会丢弃最高位,变成
正 +反
+ 1 = 0
结合公式
正 +负
= 0
得到:
负 =反 + 1;
这就是负数的按位取反再加一的由来。
(学社笔试题有涉及到)
(本专题的主要内容选自《C语言深度解剖》陈正冲著,以及百度百科,还有CSDN)
signed、unsigned
有没有符号――signed、unsigned关键字
我们知道计算机底层只认识0、1.任何数据到了底层都会变计算转换成0、1.那负数怎么存储呢?
肯定这个“-”号是无法存入内存的,怎么办?很好办,做个标记。把基本数据类型的最高位腾出来,用来存符号,同时约定如下:最高位如果是1,表明这个数是负数,其值为除最高位以外的剩余位的值添上这个“-”号;如果最高位是0,表明这个数是正数,其值为除最高位以外的剩余位的值。
我们的signed关键字也很宽恒大量,你也可以完全当它不存在,编译器缺省默认情况下数据为signed类型的。
然而,负数并不仅仅是简单的以符号+数据存储的。而是通过一种叫做补码的形式来存储。补码就是通常所说的:按位取反再加一。为什么要这样设计呢?
为什么要用补码?
下面我来解释一下为什么补码可以实现减法当做加法。
我们假设一个数字A,它的正数表示,我们称为”正”,它的相反数,我们称为”负”,我们知道:
负 +正
= 0
在计算机做加法的时候,如果最高位(符号位)有进位,则进位被舍弃。我们可以利用溢出,来让两个数相加结果变成0。(这里假设只有1个Byte)
负 +正
= 1 0000 0000 (这里是二进制表示)
这里,如果1这个位置是溢出了,因此计算机直接丢掉最高位1,变成:
负 +正
= 0;
我们假设,数字A的正数表示形式按位取反结果为”反”,很容易知道:
正 +反
= 1111 1111
正 +反
+ 1 = 1 0000 0000
右边会丢弃最高位,变成
正 +反
+ 1 = 0
结合公式
正 +负
= 0
得到:
负 =反 + 1;
这就是负数的按位取反再加一的由来。
(学社笔试题有涉及到)
(本专题的主要内容选自《C语言深度解剖》陈正冲著,以及百度百科,还有CSDN)
相关文章推荐
- 关键字short、int、long、char、float、double、signed、unsigned的理解
- 对signed、unsigned 关键字的认识
- 不带signed或unsigned关键字的char型 无符号数? 有符号数? C标准规定为 Implementation Defined !!!
- signed ,unsigned 关键字
- signed,unsigned关键字
- binary,unsigned,unsigned zerofill关键字介绍(binary区分大小写,)
- 深入理解signed、unsigned 关键字
- 不带signed或unsigned关键字的char型 无符号数? 有符号数? C标准规定为 Implementation Defined !!!
- 《C语言深度解剖》signed,unsigned关键字后面3个问题的理解
- C语言深度剖析--读书笔记4_signed/unsigned关键字
- 不带signed或unsigned关键字的char…
- 不带signed或unsigned关键字的char…
- 关键字-分节5(signed、unsigned)
- app-release-unsigned.apk is not signed
- signed和unsigned之间
- ThinkingInJava对this关键字的介绍
- 11.读c语言深度剖析 -- auto register static sizeof signed、unsigned
- java volatile关键字的含义详细介绍
- 【C语言深度剖析】读书笔记之 signed ,unsigned
- Java final static abstract关键字介绍