【C语言学习笔记】3 数据类型

无符号(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 中 ,

猜你喜欢

转载自blog.csdn.net/kevin_nan/article/details/89891440