总结一下基础和我遇到的问题 (关键字 -- 数据类型)
来源:互联网 发布:图书借阅管理系统 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 0000,9位,而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);
- 总结一下基础和我遇到的问题 (关键字 -- 数据类型)
- 总结一下基础和我遇到的问题 (关键字 -- 存储类型)
- 总结一下最近整合spring4和hibernate4遇到的问题
- php 总结一下遇到的问题
- 总结一下iOS应用发布到app store的过程和遇到的问题
- 总结一下今天在编程中遇到的问题和相应的解决办法
- 总结一下使用Swift遇到的几个小问题和几个小知识点
- 总结一下以前的工作中遇到的问题1
- 总结一下PHP扩展开发中遇到的问题
- 开发过程中 遇到的一些小问题 总结一下
- 总结一下最近面试遇到的一些问题吧
- 总结一下今天工作中遇到的问题
- 总结一下自己Java实习后遇到的一些问题。
- 刚开始玩openMP,总结一下遇到的一点小问题。
- 我遇到的c++、mfc问题总结(2)
- 我学tensorflow遇到的问题【总结】
- 刚接触ubuntu,遇到的小问题总结一下(持续更新)
- mark一下遇到的问题
- 2017 Multi-University Training Contest
- ZooKeeper快速入门
- open,write,read与fopen,fwrite,fread的区别
- 安卓开发学习资源汇总
- DBVisualizer 解决中文乱码问题
- 总结一下基础和我遇到的问题 (关键字 -- 数据类型)
- 代码优化片段--多处使用同一个对象时
- LeetCode 98 Validate Binary Search Tree(Python详解及实现)
- centos7自学之2-jdk配置
- java实现udp打洞,服务器转发消息
- Java 内存模型与线程
- python基础第四篇
- Go语言程序记录日志
- 浅谈 uninitialized_copy() 的参数类型