记录每次学习的过程,总结学习的内容,希望能给到自己和别人帮助。
编译型语言:例如C、C++
解释型语言:例如Python、JS
区别:
编译型语言只要翻译1次
解释型语言每次运行都要逐行翻译
命名规则(数字、字母、下划线)见名知意
● 规则说明:
○ 只能由数字、字母、下划线_组成;
○ 不能使用数字开头;
○ 不能使用关键字;
○变量名之间大小写是区分的;
命名分类:
大驼峰 MyFirstName
小驼峰 myFirstName
下划线命名my_first_name
C语言在可移植类型 stdint.h 和 inttype.h 中规定了精确宽度整数类型
#include <stdio.h>
#include <inttypes.h>int main() {// 8位整型int8_t a=127;printf("%dn", sizeof(a));// 16位整型int16_t b = 127;printf("%dn", sizeof(b));// unsigned 无符号,没有符号位,数值为正数uint8_t c = 255;uint16_t d = 200;return 0;
}
特殊类型:char
char表示为字符类型,用于存储单个字符,每个字符变量都是由8个bit位构成,在内存中就是1个字节。
相关特性:
● 在给字符型变量赋值时,需要用一对英文半角格式的单引号(’ ')把字符括起来。
● 字符变量在内存单元存储时,是将与该字符对应的ASCII码放到变量的存储单元中。
char的本质就是一个1个字节大小的整型
常量不可修改(常量的值在程序运行时不会改变)
两种方法:
//1.预处理常量,没有分号(在main之前)
//预处理关键字 常量名 常量内容
#define PI 3.14
// 2.const常量(在方法里)
const修饰的变量就是常量,不可修改
//关键字 类型 常量名 常量内容
const double pi2 = 3.14;
● 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数
○ 它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”
● 当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的
● 十进制转化二进制的方法:
○ 用十进制数除以2,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果
口诀:除二取余,倒序排列法
● 八进制,Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1
○ 一些编程语言中常常以数字0开始表明该数字是八进制
● 八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此常应用在计算机语言中
● 八进制和二进制互转:
● 十进制转化八进制的方法:
○ 用十进制数除以8,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果
● 十六进制(英文名称:Hexadecimal),同我们日常生活中的表示法不一样,它由0-9,A-F组成,字母不区分大小写
○ 与10进制的对应关系是:0-9对应0-9,A-F(或a-f)对应10-15
● 十六进制的数和二进制数可以按位对应(十六进制一位对应二进制四位),因此常应用在计算机语言中
● 十六进制和二进制互转:
● 十进制转化十六进制的方法:
○ 用十进制数除以16,分别取余数和商数,商数为0的时候,将余数倒着数就是转化后的结果
十进制 | 以正常数字1-9开头,如15 |
---|---|
八进制 | 以数字0开头,如017 |
十六进制 | 以0x或0X开头,如0xf |
二进制 | 以0b或0B开头,如0b1111 |
#include <stdio.h>int main() {// 十进制方式赋值int a = 15;// 八进制方式赋值int b = 017;// 十六进制方式赋值int c = 0xf;// 二进制方式赋值int d = 0b1111;printf("%d, %d, %d, %dn", a, b, c, d);return 0;
}
为了解决上面的问题,出现了反码,反码的计算规则如下:
● 正数的反码就是原码本身;
● 负数的反码是按位取反(但符号位不变);
● 1 -> 0000 0001 -> 0000 0001
● -1 -> 1000 0001 -> 1111 1110
正数的补码就是原码本身;
负数的补码就是在反码的基础上+1;
● 1 -> 0000 0001 -> 0000 0001 -> 0000 0001
● -1 -> 1000 0001 -> 1111 1110 -> 1111 1111
—八进制一位对应二进制的三位 一对三
例如:八进制的76321转换成二进制:
八进制: 7 6 3 2 1
二进制:111 110 011 010 001
—十六进制的数和二进制数可以按位对应(十六进制一位对应二进制四位),因此常应用在计算机语言中 一对四
● 十六进制(英文名称:Hexadecimal),同我们日常生活中的表示法不一样,它由0-9,A-F组成,字母不区分大小写
○ 与10进制的对应关系是:0-9对应0-9,A-F(或a-f)对应10-15
例如:十六进制的a6b2f1转换成二进制:
十六进制:a 6 b 2 f 1
二进制: 1010 0110 1011 0010 1111 0001
#include <stdio.h>int main() {// 2数相除,要想得到小数的结果,分子分母必须有一个数是小数double c = 5/2; // 5, 2个都是整数,只会取整printf("c1 = %lfn", c);c = 5.0/2; printf("c2 = %lfn", c);c = 5/2.0; printf("c3 = %lfn", c);int i = 0;// 前置++// 先加后用int b = ++i; printf("前置:b = %d, i = %dn", b, i);// 后置++// 先用后加i = 0;b = i++;printf("后置:b = %d, i = %dn", b, i);return 0;
}
结果是:
c1 = 2.000000
c2 = 2.500000
c3 = 2.500000
前置:b = 1, i = 1
后置:b = 0, i = 1
#include <stdio.h>int main() {int a = 10;a += 5;printf("a = %dn", a);return 0;
}
结果是:
a = 15
C 语言的比较运算中, “真”用数字“1”来表示, “假”用数字“0”来表示。
#include <stdio.h>int main() {int a = 10;int b = 20;printf("%dn", a == b);printf("%dn", a != b);printf("%dn", a > b);printf("%dn", a < b);printf("%dn", a >= b);printf("%dn", a <= b);return 0;
}
#include <stdio.h>int main() {// &&(与),可以理解为并且// 案例:请判断班长和他女朋友是否符合法定结婚年龄int boy = 25;int girl = 21;int result = boy >= 22 && girl >= 20;printf("%dn", result);// ||(或),可以理解为或者// 案例:班长女朋友玩原神没有原石了,请帮班长判断是否有足够的钱double wx_money = 100;double alipay_money = 300;result = wx_money >= 398 || alipay_money >= 398 || wx_money+alipay_money >= 398;printf("%dn", result);// !(非),可以理解为不是printf("%dn", !0);printf("%dn", !!1);// 短路规则// && 左边为假,右边不执行0 && printf("我是右边n");// || 左边为真,右边不执行1 || printf("我是右边n");return 0;
}
常见的位运算符号有&、|、^、~、>>、<<,分别代表着如下含义:
假设是第n位需要操作
置0:数 & (1<<n)
置1: 数 | (1<<n)
取反: 数 ^ (1 << n)
取值:(数 & (1<<n))>> n
// 将变量a的第2位设置为1,其他位保持不变uint8_t a = 0b10110011; // 0xb3;// 0b1011 0111 b7printf("第2位设置为1: %#xn", a | (1 << 2));// 0b10110011 原来的数// 0bxxxxx1xx 第2位和1按位或,第2位即可变成1,问题是,其它位不变,0和原来的位按位或,维持不变// 0b10110011 原来的数// 0b00000100 按位或的数 0x04 1 << 2 就是0x04printf("第2位设置为1: %#xn", a | 0x04);// 将变量b的第2位、第6位设置为1,其他位保持不变uint8_t b = 0b10110011; // 0xb3;// 0b11110111 // f7uint8_t temp = b | (1 << 2);temp = temp | (1 << 6);printf("第2位、第6位设置为1: %#xn", temp);printf("第2位、第6位设置为1: %#xn", b | ((1 << 2) | (1 << 6)));// 将变量c的第5位设置为0,其他位保持不变uint8_t c = 0b10110011; // 0xb3;// 10010011 0x93printf("第5位设置为0: %#xn", c & ~(1 << 5));// 0b10110011 原来的// 0bxxyxxxxx y和第5位,位运算一定变为0, 一个位和0按位与,一定变成0,问题是,其它位不变// 上面已经确定是按位与&,一个位和1按位&,维持不变// 0b10110011 原来的// 0b11011111 df 按位& , ~(1 << 5) 就是0xdf// 0b10010011 printf("第5位设置为0: %#xn", c & 0xdf);// 将变量d的第0~3位设置为0,其他位保持不变uint8_t d = 0b11111111; // 0xff;printf("第0~3位设置为0: %#xn", d & ~(1 << 0 | 1 << 1 | 1 << 2 | 1 << 3));printf("第0~3位设置为0: %#xn", d & 0xf0);// 将变量e的第2位取反,其他位保持不变uint8_t e = 0b10110011; // 0xb3;// 0b10110111 // 0xb7printf("第2位取反:%#xn", e ^ (1 << 2));// 0b10110011 原来的数// 0bxxxxxyxx 一个位和y按位异取反,y为1,x为0// 0b10110011 原来的数// 0b00000100 异或的数 0x04 (1 << 2) 就是0x04printf("第2位取反:%#xn", e ^ 0x04);// 将变量dat取出8-15位uint32_t dat = 0x12345678;// 0xyyyyzzyy 0x0000ff00 按位与 &,还得右移8位printf("%#xn", (dat & 0x0000ff00) >> 8);
凡心所向,素履以往,生如逆旅,一苇以航。
本文发布于:2024-02-02 21:42:34,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170688135646631.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |