总结一下基础和我遇到的问题 (关键字 -- 数据类型)

来源:互联网 发布:图书借阅管理系统 php 编辑:程序博客网 时间:2024/06/11 12:18

数据类型:

数据类型平时用的都比较多,因此不再阐述,大家肯定都知道。

注意区分一下unsigned  signed 的区别,下面以char为例:

        首先,在缺省条件下,编辑器会默认数据为signed 类型

        char,内存中占一个字节,因此,8位,因此,unsigned char 范围是0~255,

这个大家都会算,那么signed  char的范围是多少? 若是按照unsigned char 计算的话,是-127~127,但显然和学到的不一样,应该是-128~127,为啥?

(补充:正数的补码和原码相同,负数的补码是其反码加一)

        signed char高位为符号位,当符号位为 0时,0 0000000~0 111 1111,当符号位为1时,1 000 0000~1111 1111,我们发现了1 000 0000,它来表示什么? -0?,显然并不是,我们用它来表示 -128-128二进制为 : 1 1000 00009位,而char只取8位,1000 0000,当然,为什么用1 000 0000来表示-128 的原因不止这些,详细参考一篇大神博客:http://blog.csdn.net/daiyutage/article/details/8575248

 

还有一点需要注意:char很特殊,他分为 单纯的char ,unsigned char signed char ,

单纯的char是真正的字符类型,而unsignedchar signed char是用来声明数值的,

unsigned char范围0~255

signed char范围 -128~ 127

 

看一个经典的例子:

int i = -20

usigned int j = 10;

i  + j 值为多少?

很多人会说是-10 ,并且敲出代码:

 

int i = -20;

unsigned int j = 10;

printf("%d\n",i + j);

打印出-10

但实际上是错误的,答案是:4294967286

首先,j是无符号数,与有符号数i,相加,i会被隐式转换为无符号,那么,-20的首位为1 ,将会变动的很大,所以,相加的得到了4294967286如此大的数。

那么为什么代码打印的是-10? 原因是:printf("%d\n",i+ j); %d,将按有符号整型输出,所以是-10,应该用 printf("%u\n",i + j);

阅读全文
1 0
原创粉丝点击