英伟达AI体验中心:DGX Spark与交互式AI技术解析
2026/10/26 7:50:51
signed /unsigned 整型
- signed int(有符号 int)
默认的 int 就是 signed int,signed 可以省略
最高位是符号位:0 代表正数,1 代表负数- unsigned int(无符号 int)
没有符号位,全部比特用来存数值,只能存大于等于 0 的数- 负数赋值给 unsigned
按照补码直接 reinterpret(重新解读二进制)
1 )计算机内部负数用补码存储
2. )将负数赋值给 unsigned 变量:
a ). 先得到这个负数的补码二进制
b ) . 不看符号,把这一串二进制直接当做无符号数字解读
3 ) 公式
4) 例子// 无符号整形 unsigned int num = 10; cout << num << endl; num = -10; cout << num << endl;
常见坑
- 无符号数不要和负数比较
用公式计算unsigned的值unsigned int a = 5; //常见坑:无符号整数不能和负数比较 if (a > -1) { cout << "成立" << endl; }
-1转为 unsigned就是4294967295,5>4294967295为假。- 循环里用 unsigned 容易死循环
for(unsigned int i=10;i>=0;i--) { cout << i; }i 是无符号,i 减到 0 再减 1 不会变成‑1,变成很大正数,永远满足i>=0,死循环。
数据类型与 sizeof 运算符
sizeof 运算符
- sizeof 用来获取类型或者变量在内存中占用的字节数。
- 返回值类型:size_t,属于无符号整数类型。
- sizeof 是编译期运算符,不是函数,编译阶段就计算出结果,运行时不参与计算。
内置数据类型
- 整型
无符号整型:unsigned char、unsigned short、unsigned int、unsigned long long,只能存储≥0 的数字。- bool 布尔类型
占用内存:1 字节,不是 1bit
只有两个取值:true(逻辑真,等价 1),false(逻辑假,等价 0)- 浮点型
//写法1 cout << "char : " << sizeof(char) << endl; cout << "bool : " << sizeof(bool) << endl; cout << "short : " << sizeof(short) << endl; cout << "int : " << sizeof(int) << endl; cout << "long : " << sizeof(long) << endl; cout << "long long : " << sizeof(long long) << endl; cout << "float : " << sizeof(float) << endl; cout << "double : " << sizeof(double) << endl; cout << "long double : " << sizeof(long double) << endl; //写法2 int a; cout << "sizeof(a) : " << sizeof(a) << endl;
typedef
- 作用
typedef是类型重命名关键字,给已有的数据类型起一个简短的别名,并不会创造出新的数据类型
别名和原类型完全等价- 基础语法
typedef 旧类型名 新类型名;//类型类型起别名 typedef unsigned int uint; typedef long long ll; typedef unsigned long long ull; int main() { //使用别名创建对象 uint a = 100; ll b = 12345651212; ull c = 9999999; cout << a << endl; cout << b << endl; cout << c << endl; //原生类型 unsigned int a2 = 100; cout << a2 << endl; return 0; }
知识点
a)ASCII 编码
每个英文字符都对应一个整数编号,这个编号就是ASCII 码
例:'A'=65、'B'=66、'a'=97、'0'=48
char类型变量底层存的就是这个数字
b)cin 读取规则
cin 根据变量的类型决定读取方式
如果变量是int:键盘输入65→ 读取成数字 65
如果变量是char:键盘输入65→ 读取成字符 A
c)C++的cin是根据变量的类型在缓冲区读取数据
变量和常量
变量的创建
变量:值可以改变;常量:值不可改变
- 语法
数据类型 变量名;- 变量命名规则
a)只能由字母、数字、下划线组成;开头必须是字母或下划线
b)不能纯数字开头,不能有空格、-等特殊符号
c)不能是 C++ 关键字,如int、char、if
d)名字要有含义,见名知意
e)区分大小写:num和Num是两个变量变量初始化
- 定义变量的时候,直接给它赋一个初始值,就是初始化
int age = 18; char ch = 'w'; double weight = 48.0; unsigned int height = 100;- 变量的分类
a)全局变量
定义位置:所有大括号{}外面(main函数外面)
作用域:整个程序都可以访问使用
未初始化:默认值为 0int x; //全局变量 int main() { cout << x << endl; // 全局变量,未初始化,默认为0 return 0; }
b)局部变量
定义位置:大括号{}内部(例如main函数里面)
作用域:仅限当前大括号内可用
未初始化:没有默认值,数值随机,使用前必须赋值,否则运行出错int main() { int x; //局部变量 cout << x << endl; // 局部变量,未初始化,是随机值,编译报错 return 0; }
c)同名冲突规则
局部变量优先
当局部变量和全局变量名字一样时,在局部范围内优先使用局部变量的值int n = 1000; //全局变量 int main() { int n = 10; // 局部变量 cout << n << endl; // 10 return 0; }常量
常量:程序运行期间,值永远不能被修改,一共有 3 种:字面常量、#define 宏常量、const 常量
- 字面常量
a)整型常量
十进制:100、-5、17
八进制:数字0 开头,012、016
十六进制:0x 开头,0x123、0xFF
b)字符常量:单引号包裹 'a'
c)浮点常量:3.14,科学计数法 1E6(= 1000000)- #define 宏常量 (预处理常量)
a)语法
#define 常量名 内容
b)#define M 100 #define CH 'x' #define PI 3.1415926 int main() { cout << M << endl; cout << CH << endl; cout << PI << endl; return 0; }
c)底层原理:预处理阶段纯文本替换#define M 100 #define CH 'x' #define PI 3.1415926 int main() { //预处理:底层原理纯文本替换 cout << M << endl; -> 等价于 cout << 100 << endl; cout << CH << endl; -> 等价于 cout << x << endl; cout << PI << endl; -> 等价于 cout << 3.1415926<< endl; return 0; } const 定义常量
a)语法
const 数据类型 常量名 = 值;
b)例子:计算圆周长//计算圆周长 const double PI = 3.1415926; int main() { int r = 0; cin >> r; cout << "周长:" << 2 * PI * r << endl; cout << "面积:" << PI * r * r << endl; /*PI = 3.14;*/ //报错,常量修饰后不能修改 return 0; }
c)const 常量三大好处
可读性高:PI比直接写3.14159易懂
可维护性强:只需要在定义处改 1 次值,所有用到它的地方全部自动更新(一改全改)
自带类型,编译时做类型检查,比#define严谨
d)#define VS const 对比
e)禁止修改const int num = 10; num = 20; //报错!常量不能赋值修改
例题
- 鸡兔同笼
https://www.luogu.com.cn/problem/B2614- 方法1 先求兔子,再求鸡
//int main() //{ // //鸡兔同笼 // int head = 35; // int foot = 94; // // 思路:假设全部是鸡,用总的脚数减鸡的总脚数,多出来的是兔子的脚 // // 在除2 就是兔子的个数 // int rabbit = (foot - head * 2) / 2; // int chicken = head - rabbit; // cout << "兔子个数:" << rabbit << endl; // cout << "鸡的个数:" << chicken << endl; // return 0; //}- 方法2:先求鸡,再求兔子
int main() { int j = 0; // 鸡的个数 int t = 0; //兔的个数 int h = 35; //总头数 int f = 94; //总脚数 //思路:假设都是兔子,用兔子的总脚数 减总脚数 // 多出来的是鸡的脚数 //再除2 得到的是 鸡的个数 //最后用 总头数减鸡的个数 得到是 兔的个数 j = (4 * h - f) / 2; t = h - j; cout << "鸡的个数为:" << j << endl; cout << "兔的个数为:" << t << endl; return 0; }