C语言之变量和数据类型


计算机处理的数据(诸如数字、文字、符号、图形、音频、视频等)都是以二进制的形式存放在内存中的;
一个元器件是1Bit, 有0和1两种结果; 8Bit为1Byte, 是一个字节; 字节就是最小的可操作单位.

变量(Variable)

  • 计算机先在内存中找一块区域,规定用它来存放整数,并起一个好记的名字,方便以后查找。然后我们就可以将整数放进这块区域.
  • 赋值是指把数据放到内存的过程。
#include <stdio.h>
int main()
{
  /* 定义变量, 初始化, 再次赋值 */
  int a;
  a = 1;
  printf("%d\n", a);
  a = 2;
  printf("%d\n", a);
  a = 3;
  printf("%d\n", a);

  /* 定义变量并初始化 */
  int b = 123;
  printf("%d\n", b);

  /* 连续定义多个变量 */
  int c, d, e, f = 456, g = 789;
  printf("%d\n", f);
  printf("%d\n", g);

  return 0;
}
  • 数据是放在内存中的,在内存中存取数据要明确三件事情:数据存储在哪里、数据的长度以及数据的处理方式。
  • 数据类型只在定义变量时指明,而且必须指明;使用变量时无需再指明,因为此时的数据类型已经确定了。

数据类型

  • 在C语言中,每一种数据类型所占用的字节数都是固定的,知道了数据类型(指明了数据的解释方式),也就知道了数据的长度。
  • 数据类型只在定义变量时指明,而且必须指明;使用变量时无需再指明,因为此时的数据类型已经确定了。
  • puts (output string) 只能输出字符串,
  • printf (print format “格式化打印”)比 puts 更强,可以输出字符串、整数、小数、单个字符等,并且可以自己定义输出格式,例如:
    以十进制、八进制、十六进制形式输出;
    要求输出的数字占 n 个字符的位置;
    控制小数的位数。

1.整型(printf输出)

%u 表示按unsigned int格式输入或输出数据
%hd用来输出 short int 类型,hd 是 short decimal 的简写;
%d用来输出 int 类型,d 是 decimal 的简写;
%ld用来输出 long int 类型,ld 是 long decimal 的简写。

字节数: 2 ≤ short ≤ int ≤ long

#include <stdio.h>
int main()
{
  /*
    short === short int
    至少占2个字节(2Byte == 16Bit)
    Bit只有两种状态: 0或1
   */
  short a = 0;

  /*
    int大于等于short
   */
  int b = 0;

  /*
    long 大于等于int
   */
  long c = 0;
  
  /*
    short, int, long的长度关系:2 ≤ short ≤ int ≤ long
    short 并不一定真的”短“,long 也并不一定真的”长“,它们有可能和 int 占用相同的字节数。
    short至少占2个字节.
    short 的长度不能大于 int,long 的长度不能小于 int。
  */
  unsigned int d = 54321;
  short e = 12345;
  printf("%u and %hd\n", d, e);

  return 0;
}

2.sizeof 获取占用字节数

sizeof 变量名
sizeof(数据类型)

sizeof 用来获取某个数据类型或变量所占用的字节数

二、八、十六进制

#include <stdio.h>
int main()
{
  /* 二进制: 以0b或0B开头, 只含0和1 */
  int a = 0b1;
  int b = 0b10;
  int c = 0B11;
  int d = 0B0100;
  printf("二进制\n");
  printf("a = %d, b = %d, c = %d, d = %d\n", a, b, c, d);

  /* 八进制: 以数字0开头, 只含0到7 */
  a = 01;
  b = 010;
  c = 0100;
  d = 001000;
  printf("八进制\n");
  printf("a = %d, b = %d, c = %d, d = %d\n", a, b, c, d);

  /* 十六进制: 以0x或0X开头, 只含0到9再到f或0到F */
  a = 0xf;
  b = 0xf0;
  c = 0XF00;
  d = 0X0F000;
  printf("十六进制\n");
  printf("a = %d, b = %d, c = %d, d = %d\n", a, b, c, d);

  /* 进制的输出 */
  short e = 0b10;
  int f = 010;
  long g = 0x10;
  printf("e=%ho\n", e);
  printf("f=%o\n", f);
  printf("g=%lx\n", g);
  printf("g=%#lx\n", g); // ***

  return 0;
}

在这里插入图片描述

printf格式化输出(包括无符号输出格式)

常用整型有short、int、long三种类型,对应的输出格式如下表:
在这里插入图片描述

C语言中的符号位(正负)

  • C语言规定,把内存的最高位作为符号位。
  • C语言规定,在符号位中,用 0 表示正数,用 1 表示负数
    在这里插入图片描述
  • short、int 和 long 类型默认都是带符号位的,符号位以外的内存才是数值位
  • 不希望设置符号位,可以在数据类型前面加上 unsigned 关键字
#include <stdio.h>
int main()
{
  int i = -1;
  printf("i = %d\n", i);
  // 无符号输出
  printf("i = %u\n", i); //符号位在第一位,负是1,正是0

  unsigned int j = -1;
  printf("j = %d\n", j);
  printf("j = %u\n", j); //符号位在第一位,负是1,正是0

  return 0;
}

在这里插入图片描述

内存中整数的加法

加法和减法也可以合并为一种运算,就是加法运算,因为减去一个数相当于加上这个数的相反数.(5 - 3等价于 5 + (-3),10 - (-9)等价于10+9.)
有符号数在存储和读取时都要进行转化

  • 正数的原码(整数的二进制形式)、反码、补码都是一样的

  • 负数的反码是原码取反,负数的补码是负数的反码加一

  • 内存中的计算方式:补码相加,结果的原码是具体数值。

  • 计算机内存数值存储方式是补码


字符与字符串

#include <stdio.h>
int main(int argc, char **argv)
{
  // 字符
  char a = 'a';
  putchar(a);
  putchar('\n');
  printf("%c %d\n", a, a);

  // 字符串
  char str1[] = "I'm a string1. ";
  char *str2 = "I'm a string2. ";
  puts(str1);
  printf("%s\n", str2);

  return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中的变量类型包括整型、浮点型、字符型和指针型等。 整型变量用于存储整数,包括有符号和无符号类型。有符号类型可表示正、负整数,无符号类型只能表示非负整数。取值范围主要取决于所使用的编译器和机器平台,通常有char(1字节,范围-128到127或0到255)、short(2字节,范围-32768到32767或0到65535)、int(4字节,范围-2147483648到2147483647或0到4294967295)、long(4或8字节,范围因平台而异)、long long(8字节,范围因平台而异)等。 浮点型变量用于存储实数,包括单精度和双精度类型。单精度浮点数通常为4字节,双精度浮点数通常为8字节。取值范围也因平台不同而有所差异,但一般单精度范围约为1.2e-38到3.4e38,双精度范围约为2.3e-308到1.7e308。 字符型变量用于存储单个字符,占用1字节。字符类型可表示ASCII字符,取值范围为0到127,或者使用wchar_t类型表示更广泛的字符集。 指针型变量用于存储内存地址,用于访问和操作其他变量。指针的大小根据所在平台而定,一般为4或8字节。指针的取值范围可能占用整个地址空间,但具体大小取决于计算机的架构和操作系统。 总结而言,C语言变量类型和取值范围因平台和编译器而异,但通常整型、浮点型、字符型和指针型是基本的类型,其取值范围由不同数据类型和计算机架构决定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值