无符号(unsigned)和有符号(signed)
16位系统中一个short能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535
C标准没有具体规定各种类型数据占用存储单元的长度,这是由各编译系统自行决定的。≥
C标准只要求long型数据长度不短于int型,short型不长于int型。即sizeof(short)≤sizeof(int)≤sizeof(long)≤sizeof(long long)
VC和gcc所占字节数:
int shortlong long long
VC 4 24 8
gcc 4 24 8
1、整型
[signed] int
unsigned int
[signed] short [int]
unsigned short [int]
[signed] long [int]
unsigned long [int]
【新增】
[signed] long long [int]
unsigned long long [int]
2、字符型
char
signed char:-128~127(【注意】可以为负,只是为负时,没有对应的ASCII码而已)
unsigned char:0~255
①C99把字符型数据作为整型数据的一种
②C99并未指明char是按signed char处理,还是按unsigned char处理(具体实现有编译器决定)
【明确】从分类上讲,只有signed char和unsigned char两种
关于char,unsigned char,signed char见:
C99中char,unsigned char,signed char,http://blog.csdn.net/duyiwuer2009/article/details/7869103
总之,不是signed char就是unsigned char
③
unsigned char ch = -6;//合法
3、浮点型
float
double
long double
4、【新增】布尔型
bool
原文:https://blog.csdn.net/duyiwuer2009/article/details/7868690
数据类型
sizeof是一个运算符,给出某个类型或变量在内存中所占据的字节数
sizeof(int ) sizeof(i);4个字节 每个字节八个位 32个比特
sizeof()是静态方法 i++并产生没有实际的代码 并不会真的去做计算:它在编译时起作用,而不是运行时
编译 => 运行
11 11 11 11+00 00 00 01=1 00 00 00 00 加出带溢出的一位
1 1111111 00000000 00000000 00000000 11111111
#include "pch.h"
#include<stdio.h>
int main()
{
int i = 2147483648;
//while (++i > 0);
printf("%d\n", i);// =>-2147483648
i = i - 1;
printf("%d\n",i);// 2147483647
return 0;
}
越界!!!!
全部都是整数 没有负数部分 255+1 = 0; !!!!
-128 ~127 => 0~255
最大数的代码
i++ :先引用后增加
++i :先增加后引用
最大值加1 就变成负号了 跳出循环 127+1 = -128!!!!!!!!!!!
#include "pch.h"
#include<stdio.h>
int main()
{
short i =0;
while (++i > 0);
printf("%d\n", i);
i = i - 1;
printf("%d\n",i);
return 0;
}
————————————————————————————————————————————————————
转化为int 0开头 八进制 0x 16进制 计算机会转化为二进制
int也是这样
https://blog.csdn.net/czc1997/article/details/81254971
float double
%e (%E)科学计数法
%.16f (保留十六位) 还会四舍五入
double float 不能准确表达一个数 0.00045(实际是小于0.00045) -> 0.000(离散的数字来表达)
-0.00045 -0.000
带小数点的四则运算是不精确的
一般用整数四则运算 然后再除
然后专用硬件计算完 再交出来
double 好用> float
字符
ASCII 码
https://www.cnblogs.com/bhlsheji/p/4302023.html
下面第二种 会导致i 一直读到 ' ' 空格 '9' - '0' = 9
scanf("%d%c",&x,&i);
scanf("%d %c", &x, &i);
逃逸字符 \n \\n .............
\b
\t 表格位 上下文对齐
a2 a
a a
自动转换
scanf() short %hd longlong %ld 整数形式输入一个char 要先 int 再交给char
强行转换(int)double double-> int (short)32768 = -32768 (char)32768 = 1000......0 = 0(最后一位)
double a = (int )i /j ; -> { (int)(i) } / j 强行转换优先级大于四则运算 (int)(i/j)
'1'+3 = 52
bool
true =1 \\\\\\\\\\\\\\\\false = 0
逻辑运算
4 < x < 6 => 4 <x == 1 1 < 6 -> 1
! age < 20 等于1
条件运算符 ? :
逗号运算符 用于for 中 ,