5、C语言——前言(基础知识)

文章详细介绍了计算机中数值型数据(如二进制、十进制、八进制、十六进制)的表示方法和相互转换,以及C语言中的数据类型、注释方式、关键字和标识符的使用。此外,还涵盖了非数值型数据的ASCII码表示和C语言中的逻辑类型bool。最后讨论了在Ubuntu和Windows之间共享文件夹的方法,包括Samba服务的安装和配置。
摘要由CSDN通过智能技术生成

1、计算机的数据存储

计算机中的数据存储分为两大块:数值型数据和非数据型数据的存储

1.1、数值型数据的表示方法:

主要分为:二进制数据、十进制数据、八进制数据、十六进制数据。四种类型可以相互转化

1.1.1、二进制数据:

由0、1组成,01010101,是计算机可以识别的语言,机器语言,可以由0b来进行标识。
二进制转十进制: 最低为乘以10的0次,次低位乘以10的一次,依次递增
二进制转八进制: 每三位转化为一位八进制数,最高位不足补零
例如: 1001101 0115
二进制转十六进制: 每四位转化一位十六进制数,最高位不足补零
例如: 100101110 0x12e

1.1.2、十进制数据:

由0-9组成,是人类能看懂的语言
十进制转二进制: 直接对二取余,直到商为0,然后每个余数倒着读
十进制转8进制: 直接对8取余,直到商为0,然后每个余数倒着读(与二进制方式一样)
十进制转16进制: 直接对16取余,直到商为0,然后每个余数倒着读,9以上的从a一次加

1.1.3、八进制数据:

由0-7组成,一般八进前需要加前导符0来标识
例如0122
八进制转十进制: 最低为乘以8的0次,次低位乘以8的一次,依次递增
八进制转二进制: 八进制数据的每一位可以由三位二进制数来表示
例如 0122 000001010010

1.1.4、十六进制数据

由1-9 a-f组成。一般十六进制需要0x作为前导符来标识
例如0xa1

十六进制转十进制: 最低为乘以16的0次,次低位乘以16的一次,依次递增
十六进制数转二进制: 十六进制数的每一位可以由四位二进制数来表示
例如: 0xa1 000010100001

1.1.5、注意

无论是什么类型的数据,计算机最终都会转化为计算机可以识别的二进制数据

1.1.6、C语言中数值型数据的表示方法

二进制:由01组成的数据
    1000110111
    
十进制:由0-9组成的数据,这也是人类能够直接识别的
    39
    二进制转十进制:
    10110 -> 0*2^0+1*2^1+1*2^2+0*2^3+1*2^4=22
    十进制转二进制:
    将十进制数每次除以2,然后保存商,然后继除以,知道商为0为止,
    饭后将余数倒过来就是二进制码
    
八进制:由0-7组成的数据,一般八进制数用0开头标识
    0137
    八进制转十进制:
    0137 --> 7*8^0+3*8^1+1*8^2=47
    八进制转二进制:
    1位八进制数都要使用3位二进制标识
    0137 --> 001 011 111
    二进制转八进制:
    从右向左取三位二进制作为一位八进制即可
    101101101 --> 0555

十六进制:由0-9、a-f表示数据 a 10 b 11 c 12 d 13 e 14 f 15
    十六进制一般以0x作为标识
    0x1af6
    十六进制转十进制:
    0x1af6 --> 6*16^0+15*16^1+10*16^2+1*16^3
    十六进制转二进制:
    1位十六进制数用4位二进制来标识
    0x1af6 --> 0001 1010 1111 0110
    二进制转十六进制:
    从右向左取四位二进制作为一位十六进制即可

1.1.7、C语言实例

#include <stdio.h>

//注释的方法:
//第一种: //...  注释一行
//第二种: /* ... */  注释多行
//第三种:#if 0 ... #endif 

//数值型数据的表示方式

int main()
{
    //int:整数数据类型,用于定义变量
    //a:变量名,用于保存数据的
    int a = 35;
    //输出十进制,通过%d输出
    printf("a = %d\n", a);
    //输出八进制,通过%o输出,#输出前导符
    printf("a = %#o\n", a);
    //输出十六进制,通过%x输出,#输出前导符
    printf("a = %#x\n", a);

    //定义一个变量保存八进制数
    int b = 0527;
    printf("b = %d %#o %#x\n", b, b, b);

    //定义一个变量保存十六进制数
    int c = 0xa76f;
    printf("c = %d %#o %#x\n", c, c, c);

    //可以定义一个二进制数,以0b作为前导符
    int d = 0b1000101;
    printf("d = %d\n", d);

    return 0;

执行结果
在这里插入图片描述

1.2、非数值型数据的表示方法:

非数值型数据也就是ascii码,只要是单引号或者是双引号里面出现的数据都是非数值型数据
计算机只能识别二进制也就是数值型数据,但是在编程中往往会出现一些非数值的数据,比如人名、性别等等,所以我们需要让计算机识别这些,所以就发明出来专门识别非数值型数据的东西,称之为ASCII码
注意: 如果一个双引号或者单引号里面出现了数字,都认为是非数值型数据
“hello w965orld” ‘7’

常用的字符

'\0'   -->   0 (一般在字符串的结尾)
'\n'   -->   10 (用作换行)
'0'-'9'  -->  48-57
'A'-'Z'  --> 65-90
'a'-'z' --> 97-122

2、C语言中的注释方法(C89)

第一种

//

第二种

/*

*/

第三种

#if 0

#endif//如果要解除注释只需要将0换成1即可

3、关键字

(C语言严格区分大小写,关键字都是小写)
一共32种关键字:(c89有28个,C99有32个, C11有42个)
分别为(数据类型,存储类型,逻辑类型 ,其他
数据类型:

int char short long double float
signed  unsigned  enum  struct  union  void

存储类型:

const  static  volatile  extern  auto  register

逻辑类型:

if  else  for  do while switch 
case  break default continue goto return

其他:

sizeof  typedef

4、标识符

标识符是指代码中的变量、函数名、结构体名、宏定义名、取别名等等
命名规则:
1、不能与关键字同名
2、名字的第一个字符不可以是数字
3、只能由数字、字母、下划线 组成

5、数据类型

作用:可以确定数据在内存中开辟空间的大小
分为:基本数据类型、构造数据类型、指针类型、空类型

5.1 分类

基本数据类型:
逻辑类型
整数类型
浮点类型
void类型
构造数据类型:
数组
结构体
联合体(共用体)
枚举

5.2 基本数据类型

5.2.1 逻辑类型 – bool类型

true 真
false 假
注意:linux默认是没有bool类型的(实际使用可以使用_Bool申明或加头文件<stdbool.h>后使用bool数据类型),一般用0和1表示假和真,非0即为真
一般逻辑类型主要是在控制语句中使用

#include <stdio.h>

//linux系统中默认没有bool类型
//但是可以使用_Bool,它定义的变量的值只有1和0
//非零即为真

int main()
{
    _Bool a = 1;
    printf("a = %d\n", a);

    _Bool b = 0;
    printf("b = %d\n", b);

    _Bool c = 128;
    printf("c = %d\n", c);

    _Bool d = -0.0000005;
    printf("d = %d\n", d);

    return 0;

执行结果
在这里插入图片描述
如果想使用bool,必须添加头文件stdbool.h
在这里插入图片描述

5.2.2 整数类型

整数类型一般分为char、short、int、long
每一种整数类型又分为有符号(signed )和无符号(unsigned )
有符号就是有正数也有负数,无符号都是正数和0
注意一般定义变量是需要说明有无符号,如果不加,默认表示有符号的

5.2.2.1 char 字符类型

char类型定义的变量在内存中占1个字节,8位
char类型存储的数据范围:
无符号:0 ~ 255
有符号:-128 ~ 127
char类型用的最多的地方是用于保存字符(一个非数值型数据)
char ch = ‘a’;

5.2.2.2 short 短整型 (short int)

short类型定义的变量在内存中占2个字节
short类型存储的数据范围:
无符号:0 ~ 2^16-1
有符号:-2^15 ~ 2^15-1

5.2.2.3 int 整型

int类型定义的变量在内存中占4个字节
short类型存储的数据范围:
无符号:0 ~ 2^32-1
有符号:-2^31 ~ 2^31-1

5.2.2.3 long 长整型 (long int)

long类型定义的变量在64位操作系统中占8个字节,在32位操作系统中占4个字节
short类型存储的数据范围:
无符号:0 ~ 2^64-1
有符号:-2^63 ~ 2^63-1

5.2.3 浮点类型(后续补充浮点转二进制)

浮点型数据有两种:
单精度类型:float 占4个字节
双精度类型:double 占8个字节
精确到小数点后六位

5.2.4 void类型

void是一个空类型,默认不占字节数

5.3 数值型数据在计算机中的存储形式

数据在保存的时候涉及原码、反码和补码的转换问题
原码是人类识别的,补码是计算机识别的,反码用于原码和补码的转换

正数:原码、反码和补码是一样的
有符号数:由于有符号数有正有负,所以最高位为符号位,1表示负数,0表示正数
对于负数而言,反码就是原码取反,补码等于反码加1,注意符号位永远不变

方法:存储时看数据,取出时看类型

unsigned char a = 10; --> 1010
存储时:
    原码:0000 1010
    反码:0000 1010
    补码:0000 1010
取出时:
    补码:0000 1010
    反码:0000 1010
    原码:0000 1010 = 10
    
signed char b = -10;  --> 1000 1010
存储时:
    原码:1000 1010
    反码:1111 0101
    补码:1111 0110
取出时:
    补码:1111 0110
    反码:1111 0101
    原码:1000 1010 = -10
    
signed char c = 129;  ->1000 0001
存储时:
    原码:1000 0001
    反码:1000 0001
    补码:1000 0001
取出时:
    补码:1000 0001
    反码:1000 0000
    原码:1111 1111 = -127
    
unsigned char d = -1; -> 1000 0001
存储时:
    原码:1000 0001
    反码:1111 1110
    补码:1111 1111
取出时:
    补码:1111 1111
    反码:1111 1111
    原码:1111 1111 = 255
    
signed char c = 135; 
存储时:
    原码:1000 0111
    反码:1000 0111
    补码:1000 0111
取出时:
    补码:1000 0111
    反码:1000 0110

六、共享文件夹

6.1 共享文件夹的作用

就是实现Ubuntu系统和windows系统文件的传输

6.2 如何创建共享文件夹

点击菜单栏的“虚拟机”,点击“设置”,进入虚拟机设置窗口
然后点击当前窗口的左上角的“选项”,然后点击“共享文件夹”,在右边“文件夹共享”里面选择“总是启用”,然后在下方点击“添加”,然后选择共享文件夹的路径,点击确定即可

6.3 如何使用共享文件夹

当共享文件夹创建好之后,Ubuntu的共享文件夹的路径是/mnt/hgfs/share,windows就是你自己指定的路径

文件共享工具(samba)

1、Samba的安装(确认ubuntu已联网)**

sudo apt-get install samba

若下载失败执行指令 sudo apt-get install update

2、创建共享目录

切换到家目录下(可自由选择):

cd ~
mkdir share_samba //如果配置的共享目录不存在则创建
sudo chmod 777 share_samba //将共享目录属性设置为 777

3、配置Samba配置文件

一、什么是Samba

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。

二、安装Samba

1、查看是否有安装samba

samba -V

如果安装了会有对应的samba版本信息输出

2、安装samba

sudo apt install samba samba-common cifs-utils smbclient

三、配置Samba服务

1、创建共享目录(以samba_workspaces为例)

mkdir samba_workspaces

2、为samba设置登录用户

先创建一个用户(以samba_user为例)

sudo useradd samba_user -s /usr/sbin/nologin

设置samba登录用户的密码

sudo smbpasswd -a samba_user

3、设置登录用户对共享目录的权限

先查看samba_workspaces目录的权限

**yishurufa@ubuntu:~$ ls -l**
总用量 44
drwxrwxr-x  5 yishurufa yishurufa 4096 914 15:12 samba_workspaces
共享目录的拥有者是yishurufa,所属组是yishurufa,登录用户samba_user需要对这个目录进行操作的话,只需要将登录用户添加到这个组里面就可以。
sudo usermod -aG $(whoami) samba_user

将samba_user添加到samba_workspaces所属组,$(whoami)可以得到当前用户名,创建的共享目录的所有者和所属组都是当前用户。

4、修改samba配置文件/etc/samba/smb.conf

sudo vim /etc/samba/smb.conf

将下面内容添加到最后(path为samba_workspaces的实际路径,下面是笔者本地的路径)

[secret]
	comment = this is Linux secret share directory
	path = /home/yishurufa/samba_workspaces
	valid user = samba_user
	guest ok = no
	writable = yes
	browsable = yes
	create mask = 0755
	directory mask =0755

5、如果是ubuntu 18.04还得再加一个权限ntlm auth = yes,位置放在所有共享目录定义[Share Definitions]之前

修改前

# Allow users who've been granted usershare privileges to create
# public shares, not just authenticated ones
   usershare allow guests = yes

修改后

# Allow users who've been granted usershare privileges to create
# public shares, not just authenticated ones
   usershare allow guests = yes
   ntlm auth = yes

6、重启samba服务

sudo service smbd restart

四、测试

1、查看ubuntu的网络ip

虚拟机可以再配置一个虚拟网卡用于samba服务(设置仅主机模式)

ifconfig
2、win10环境和ubuntu环境相互ping通

3、win10环境添加网络驱动

右键“我的电脑” -> 映射网络驱动器 -> 文件夹填入 -> \192.168.56.102\secret

勾上“使用其他凭据连接”

最后输入用户名和密码
原文链接:https://blog.csdn.net/u010037542/article/details/108579650

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值