常量

字符串常量

  • 字符

例如:'f','i','z','a'编译器为每个字符分配空间。

'f' 'i' 'z' 'a'
  • 字符串

    例如:"hello"编译器为字符串里的每个字符分配空间以'\0'结束。
'h' 'e' 'l' 'l' 'o' '\0'

基本类型

  • 整数型: short int,int,long int,long long int(c99 新增).占字节大小按照从小到大书写。
  • 浮点数类型:float,double,long double
  • 字符类型: char
  • 布尔类型:_Bool
  • 枚举类型:enum

sizeof 运算符

用户获取数据类型或表达式的长度。

  • sizeof(object); // sizeof(对象);
  • sizeof(type_name); // sizeof(类型);
  • sizeof object; // sizeof 对象;

因为根据编译器不同,以下的数据类型占字节大小仅供参考

#include <stdio.h>

int main(){
int i;
char j;
float k; i=123;
j='c';
k=3.123; printf("size of int is %d \n",sizeof(int));
printf("size of i is %d \n",sizeof i );
printf("size of char is %d \n",sizeof(char));
printf("size of j is %d \n",sizeof j );
printf("size of flaot is %d \n",sizeof(float));
printf("size of k is %d \n",sizeof k ); return 0;
}
size of int is 4
size of i is 4
size of char is 1
size of j is 1
size of flaot is 4
size of k is 4
#include<stdio.h>

int main(){

printf("int sizeof is %d\n",sizeof(int));
printf("short int size is %d\n",sizeof(short));
printf("long int size is %d\n",sizeof(long));
printf("long long int size is %d\n",sizeof(long long));
printf("char size is %d\n",sizeof(char));
printf("_Bool size is %d\n",sizeof(_Bool));
printf("float size is %d\n",sizeof(float));
printf("double size is %d\n",sizeof(double));
printf("long double size is %d\n",sizeof(long double)); return 0;
}
int sizeof is 4
short int size is 2
long int size is 8
long long int size is 8
char size is 1
_Bool size is 1
float size is 4
double size is 8
long double size is 16

signed 和 unsigned

signed:代表带符号位

unsigned:代表不带符号位 ≥0

#include<stdio.h>
int main(){
short i;
unsigned short j;
i = -1;
j = -1;
printf("i is %d\n",i);
printf("j is %u\n",j);
return 0;
}
i is -1
j is 65535

计算机数据单位

cup 读懂的最小单位:bit(比特位).

bit(比特位) => b

1 / 0

Byte(字节) => B

1 1 1 1 1 1 1 1

关系:1B = 8b

1 字节可以表示多大的数? 十进制:255,十六进制:FF

最大值计算方式:2的n次方-1

二进制 十进制 十六进制
0 0 0
1 1 1
10 2 2
11 3 3
100 4 4
101 5 5
110 6 6
111 7 7
1000 8 8
1001 9 9
1010 10 A
1011 11 B
1100 12 C
1101 13 D
1110 14 E
1111 15 F
10000 16 10
10001 17 11
... ... ...
11111111 255 FF
  • 计算

已知int类型为 4 个字节。

#include<stdio.h>
#include<math.h>
int main(){
int result = pow(2,32)-1;
printf("result is %d\n",result);
return 0;
}
test6.c: In function ‘main’:
test6.c:4:2: warning: overflow in implicit constant conversion [-Woverflow]
int result = pow(2,32)-1;
^
result is 2147483647

运行报出警告,超出定义范围。为什么会这样?

因为在定义的int类型的时候默认会在前面加上signed类型,所以左边的第一位用来表示符号位。如果为 0 表示正数,如果为 1 表示负数。所以int result其实只有 7 位用来表示数值,其最大值为2^(4*8-1) -1:2,147,483,647.

修改如下:

#include<stdio.h>
#include<math.h>
int main(){
unsigned int result = pow(2,32) - 1; // 在int前加上unsigned
printf("result is %u\n",result); // 这里的%d 需要改成%u
return 0;
}
[root@localhost day1]$ gcc  test6.c  && ./a.out
result is 4294967295

result 正常显示为 2^8-1 : 4294967295.

计算机如何存储数值?

采用补码的形式存储。

  • 正数的补码:该数的二进制形式。
  • 负数的补码:
  1. 先取得该数的绝对值的二进制,也就是正数的二进制。
  2. 将第一步的值按位取反。
  3. 将第二步的值 +1.

例如:

7:

0 0 0 0 0 1 1 1

-7:

  1. 获得 7 的二进制
0 0 0 0 0 1 1 1
  1. 按位取反
1 1 1 1 1 0 0 0
  1. +1
1 1 1 1 1 0 0 1

总结

当左边第一位为0的时候,后面的1越多,字面量值越大。

当左边第一位为1的时候,后面的0越多,字面量值越大。

  • 基本数据类型取值范围

有符号 1 字节 => -2^(1x8-1) ~ 2^(1x8-1)-1

无符号 1 字节 => 0 ~ 2^(1x8)-1

有符号 4 字节 => -2^(4x8-1) ~ 2^(4x8-1)-1

无符号 4 字节 => 0 ~ 2^(4x8)-1

以此类推

为什么采用补码?

参考一下链接:

百度百科:补码

关于2的补码

c 语言学习第二天的更多相关文章

  1. C语言学习第二章

    今天开始学习常量,变量,基本数据类型,printf()函数和scanf()函数,算术运算符. 首先常量:是在程序中保持不变的量 变量:编写程序时,常常需要将数据存储在内存中,方便后面使用这个数据或者修 ...

  2. R语言学习 第二篇:矩阵和数组

    向量是一维的,只有行这一个维度,没有其他维度.R可以创建更高维度的数据对象,例如,矩阵.数据框.数组,索引高维度的对象时,需要使用元素的下标.这些对象的下标都使用中括号[]和索引,第一个维度是row, ...

  3. C 语言学习 第二次作业总结

    本次作业内容,主要有以下几点: 新建 coding 帐号,且使用 coding 上传本次作业的代码 Printf及条件判断语句的使用 作业总结 作业总结: 同学们开始渐入佳境,能够较为流畅的写出合理的 ...

  4. go语言学习笔记

    Go语言学习基本类型Bool 取值范围:true,false (不可以用数字代替)Int/uint 根据平台可能为32或64位int8/uint8 长度:1字节 取值范围-128~127/0~255b ...

  5. 20155229-付钰涵-分析自我技能延展到c语言学习状况

    我的小技能 我记得幼儿园时表演的舞蹈,也记得从水彩到素描的学习,还记得小学和初中获得的钢琴省级奖项. 舞蹈止于一年级,绘画止于三年级,钢琴从学前班到高一那十年的时间里有过断续. 03年-04年的那个冬 ...

  6. 20155306白皎 学习技能+C语言学习

    你有什么技能比大多数人更好 谈起技能,我还有感觉有微微拿得出手的也只有主持这一项才艺了吧.从小学到高中一直参加朗诵比赛,以及从小学到大学一直在所在学校有担任过主持工作. 上大学以来,也参加了院级朗诵比 ...

  7. 20155224聂小益 - 我的技能与C语言学习

    20155224聂小益 - 我的技能与C语言学习 预备作业2 ● 你有什么技能比大多人(超过90%以上)更好? 我认为我可能有些技能身边有的人比较少有,但是要是超过90%以上我实在不敢保证.毕竟厉害的 ...

  8. 12天学好C语言——记录我的C语言学习之路(Day 12)

    12天学好C语言--记录我的C语言学习之路 Day 12: 进入最后一天的学习,用这样一个程序来综合考量指针和字符串的关系,写完这个程序,你对字符串和指针的理解应该就不错了. //输入一个字符串,内有 ...

  9. 12天学好C语言——记录我的C语言学习之路(Day 11)

    12天学好C语言--记录我的C语言学习之路 Day 11: 因为指针部分比较的难,所以我们花费的时间也是最长的,希望大家耐的住性子,多多理解,多多打代码.好了,废话不多说,来看第11天的学习. //编 ...

  10. 12天学好C语言——记录我的C语言学习之路(Day 5)

    12天学好C语言--记录我的C语言学习之路 Day 5: 第五天的学习开始了,今天我们主要对几个程序进行编写,让自己充分的熟练编程语言,大量的题目会让自己变的精炼.以一个程序(program 5.1) ...

随机推荐

  1. installshield 64位系统操作注册表遇到的问题

    最近在研究IS脚本设置jdk环境变量问题,在使用RegDBKeyExist判断注册表中项的时候一直找不到,翻找文档后发现64位的操作系统需要设置 REGDB_OPTIONS. "SOFTWA ...

  2. VForm

    VForm是一款基于Vue 2/Vue 3的低代码表单,支持Element UI.iView两种UI库,定位为前端开发人员提供快速搭建表单.实现表单交互和数据收集的功能. VForm全称为Varian ...

  3. 九、.net core(.NET 6)添加通用的Redis功能

     .net core 编写通用的Redis功能 在 Package项目里面,添加包:StackExchange.Redis: 在Common工具文件夹下,新建 Wsk.Core.Redis类库项目,并 ...

  4. springboot项目启动会报4个加载不到的debug提示,可改可不改

    1. 因为启动的时候会报提示: Unable to locate LocaleResolver with name 'localeResolver': using default [org.sprin ...

  5. ETSI GS MEC 012,无线网络信息服务 API

    目录 文章目录 目录 版本 功能理解 版本 ETSI GS MEC 012 V2.1.1 (2019-12) 功能理解 RNIS(Radio Network Information Service,无 ...

  6. 物联网平台在AIoT领域8大场景应用

    物联网平台技术在AIoT智慧物联领域的应用越来越深入,尤其是在智慧城市建设项目中,提供了强有力的技术底座工具支撑.ToG的项目需要"门当户对"的服务商具备完善的资质和靠谱的技术服务 ...

  7. linux下使用fdisk进行磁盘分区详解

    目录 一.前言 二.关于磁盘分区的结构 三.fdisk命令详解 四.使用fdisk进行磁盘分区 4.1 磁盘分区规划 4.2 fdisk进行磁盘分区 4.3 格式化分区 4.4 创建挂载点/挂载目录 ...

  8. NCNN的内存显存分配器ncnn::Allocator & ncnn::VkAllocator翻译及其差异对比的学习笔记(nihui亲审过滴)

    NCNN的内存分配器 ncnn::Allocator 通用内存分配器   ncnn::PoolAllocator 内存池分配器 可以设置池大小,减少分配内存和析构内存次数,空间换时间   ncnn:: ...

  9. kettle从入门到精通 第十五课 kettle 映射 (子转换)01

    1.kettle 里面的映射和java代码里面的封装是一个概念,就是将一个可复用的模块单独抽离为公共模块供其他模块引用,用到的步骤或者组件如下 2.构建子映射,子映射需要用到映射输入规范和映射输出规范 ...

  10. Java第一次blog

    7-1 答题判题程序-1 前言 这些题目主要用到对象与类的处理: 对象是现实世界或抽象概念中的实体在计算机程序中的表示. 类则是具有相同属性和方法的对象的集合,是创建对象的模板.通过类,我们可以定义一 ...