几篇文章复习C语言,摘录重点,仅用于个人学习~
基本数据类型.png基本数据类型
short、int、long、float、double、char这六个关键字代表C 语言里的六种基本数据类型。
基本类型书写
- 整数
a,默认为10进制 ,10 ,20。
b,以0开头为8进制,045,021。
c.,以0b开头为2进制,0b11101101。
d,以0x开头为16进制,0x21458adf。 - 小数
单精度常量:2.3f 。
双精度常量:2.3,默认为双精度。 - 字符型常量
用英文单引号括起来,只保存一个字符'a'、'b' 、'*' ,还有转义字符 '\n' 、'\t'。 - 字符串常量
用英文的双引号引起来 可以保存多个字符:"abc"。
字节长度
在不同的系统上,这些类型占据的字节长度是不同的(1byte = 8bit):
16位编译器:
char/unsigned char :1字节
char :2字节
short int:2字节
int/unsigned int:2字节
long int:4字节
float:4字节
double:8字节*
32位编译器:
*char/unsigned char :1字节
char :4字节
short int:2字节
int/unsigned int:4字节
long int:4字节
float:4字节
double:8字节
long long:8字节
long double:12字节
64位编译器:
char/unsigned char :1字节
char *:8字节
short int:2字节
int/unsigned int:4字节
long int:8字节
float:4字节
double:8字节
long long:8字节
long double:16字节
具体可以用sizeof测试一下即可。
#include <stdio.h>
int main(int argc, const char * argv[]) {
printf("char==%lu\n",sizeof(char));
printf("unsigned char==%lu\n",sizeof(unsigned char));
printf("char *==%lu\n",sizeof(char *));
printf("short int==%lu\n",sizeof(short int));
printf("int==%lu\n",sizeof(int));
printf("unsigned int==%lu\n",sizeof(unsigned int));
printf("long int==%lu\n",sizeof(long int));
printf("float==%lu\n",sizeof(float));
printf("double==%lu\n",sizeof(double));
printf("long long==%lu\n",sizeof(long long));
printf("long double==%lu\n",sizeof(long double));
return 0;
}
//char==1
//unsigned char==1
//char *==8
//short int==2
//int==4
//unsigned int==4
//long int==8
//float==4
//double==8
//long long==8
//long double==16
整型
int 一般占用 4 个字节(Byte)的内存,共计 32 位(Bit)。如果不考虑正负数,当所有的位都为 1 时它的值最大,为 232-1 = 4,294,967,295 ≈ 43亿
让整数占用更少的内存可以在 int 前边加 short,让整数占用更多的内存可以在 int 前边加 long;short、int、long 是C语言中常见的整数类型,其中 int 称为整型,short 称为短整型,long 称为长整型。
浮点型
image.png printf("float 最小值: %E\n", FLT_MIN );
printf("float 最大值: %E\n", FLT_MAX );
printf("精度值: %d\n", FLT_DIG );
https://www.runoob.com/w3cnote/float-and-double-different.html
原码,反码,补码
数值的表示方法——原码、反码和补码,在计算机系统中,数值一律用补码来存储.
原码:最高位为符号位(0正,1负),其余各位为数值本身的绝对值
反码:
- 正数:反码与原码相同
- 负数:符号位为1,其余位对原码取反
补码:
- 正数:原码、反码、补码相同
- 负数:最高位为1,其余位为原码取反,再对整个数加1
#include <stdio.h>
int main()
{
int x = -1;
//int是四字节,1字节8位,所以-1有32位,最高位符号位
//原码:1000 0000 0000 0000 0000 0000 0000 0001
//反码:1111 1111 1111 1111 1111 1111 1111 1110
//补码:1111 1111 1111 1111 1111 1111 1111 1111
int y = 3;//正数原码,反码,补码全部相同
//int是四字节,1字节8位,所以-1有32位,最高位符号位
//原码:0000 0000 0000 0000 0000 0000 0000 0011
//反码:0000 0000 0000 0000 0000 0000 0000 0011
//补码:0000 0000 0000 0000 0000 0000 0000 0011
//求x+y?
//在计算机系统中,数值一律用补码来存储,
//x的补码:1111 1111 1111 1111 1111 1111 1111 1111
//y的补码:0000 0000 0000 0000 0000 0000 0000 0011
//x+y :0000 0000 0000 0000 0000 0000 0000 0010 -----如果最高位(符号位)有进位,则进位被舍弃。
//因此x+y=2
printf("%d\n", x+y);
//总结:负数:由补码获取源码<=>直接将补码减1,然后除去符号位全部取反
return 0;
}
取值范围
int 一般占用 4 个字节(Byte)的内存,共计 32 位(Bit),其中一位是符号位
所以int取值范围 2147483648~2147483647 (-231~231-1)
image.png
类型转换
类型转换规则.png不同类型数据之间的运算要注意精度扩展问题,一般低精度数据将向高精度数据扩展。
交互
在C语言中,有多个函数可以从键盘获得用户输入:
scanf():和 printf() 类似,scanf() 可以输入多种类型的数据。%d
getchar()、getche()、getch():这三个函数都用于输入单个字符。%c
gets():获取一行数据,并作为字符串处理。%s
#include <stdio.h>
int main()
{
int a = 0, b = 0, c = 0, d = 0;
scanf("%d", &a); //输入整数并赋值给变量a
scanf("%d", &b); //输入整数并赋值给变量b
printf("a+b=%d\n", a+b); //计算a+b的值并输出
scanf("%d %d", &c, &d); //输入两个整数并分别赋值给c、d
printf("c*d=%d\n", c*d); //计算c*d的值并输出
return 0;
}
//123
//123
//a+b=246
网友评论