C++ 表达式

C++ 表达式

  1. C++中的表达式由以下三种组成:
    1. operand
    2. operator
    3. others
  2. 求值需要受到以下元素的制约:
    1. 优先级
    2. 结合性
    3. 类型转换约定(强制类型转换)
      • coresion
      • casting
    4. 求值次序:收到编译器的影响
    5. 副作用:破坏可移植性,降低可读性
    6. 视频1:43
  3. 注意:防止溢出
  4. 类型转换是由compiler决定的
    • type casting强制类型转换
    • 例子:d + x/y*d + ++y:初始条件全为int
    • 强制类型转换:d + (double) x/y*d + ++y

1. 基本运算符

运算符名称作用
<<插入运算符将后面的插入流中去,也可以被理解为重定向运算符
>>取出运算符按顺序读入参数,以空格为分隔符
~取反运算符按位取反
*指针运算符取出指针所对应的内存地址中的值
sizeof求字节数运算符返回该变量或者数据结构占据的字节数
->指向成员运算符用于拿到成员中变量
  1. 二元运算符
  2. 逗号运算符:表示按照顺序向下计算,并且将最后的计算结果赋值给最左边的
    • a = 3 * 5,a * 4 => a = 60

2. 表达式的种类

  1. 表达式可以大致分为一下几种:
    1. 算术
    2. 关系和逻辑
    3. 赋值
    4. 逗号
    5. 字位运算符
  2. 操作符可以重载
    • 实现多态,避免多函数
    • 无权利定义操作符

2.1. 赋值表达式

  1. C++为左值表达式
  2. 左值 = 右值表达式
    1. 左值:可以出现在赋值表达式左部的表达式,具有存放数据的空间。
    2. 类型不同时,先计算右值表达式的值,然后转换为左值表达式,之后赋值
  3. 11中出现了右值表达式,int && x = 1

2.2. 算术表达式

  1. 增量和减量操作符
    1. 前增量(前减量):++a(–a)
    2. 后增量(后减量):a++(a–)
    3. 提高编译结果的执行效率
int main() {
	int a = 1;
	int b, c, d, e;
	cout << a << endl;//1 a = 1
	b = a++;
	cout << b << endl;//1 b = 1 a = 2
	c = a--;
	cout << c << endl;//2 c = 2 a = 1
	d = ++a;
	cout << d << endl;//2 d = 2 a = 2
	e = --a;
	cout << e << endl;//1 e = 1 a = 1

2.3. 条件表达式

  1. <exp1>?<exp2>:<exp3>
  2. 唯一的三目运算符,不允许进行重载
  3. 只计算一个运动分量
  4. 如果<exp2><exp3>的值类型相同且均为左值,则该条件运算符表达式为左值表达式。
  5. 可以嵌套(满足就近原则)

2.4. 逗号表达式

  1. 也就是进行连续计算
  2. <exp1>,<exp2>,...,<expn>
  3. <expn>的值是逗号表达式的值
int a,b,c;
d = (a = 1,b = a + 2,c = b + 3)
//a = 1
//b = 3
//c = d = 6
  1. <exp n>为左值,则该逗号表达式为左值

2.5. 字位运算符表达式

  1. 对于整形数二进制位(bit)的操作,将整形数看做二进制序列
    • 复位和置位进行操作
操作符名操作符参与运算元数备注
按位取反~单目-
按位与&双目复位
按位或|双目置位
异或^双目-
  1. 对于异或^:
    1. 与全0的二进制串进行运算:不变
    2. 与全1的二进制串进行运算:取反
    3. 与本身的运算:清零
    4. 与同一个对象进行异或运算两次:还原,应用:进行加密
  2. 交换两个整数x和y:如何写函数
//允许中间变量
int t = x;
x = y;
y = t
//不允许中间变量
a = a ^ b
b = b ^ a
a = a ^ b
//或者
x = x + y
y = x - y
x = x - y

2.6. 移位运算符表达式

  1. 不仅仅只是进行移位运算
  2. 还有将相应的数据进行转换。

2.7. 处理Overflow

  1. 在C++中计算出负值不正确的结果:我们统一称为exception

2.8. 左值表达式和右值表达式

  1. 左值表达式:++i
  2. 右值表达式:i++
CUDA C++表达式与普通的C++表达式类似,但是还有一些特殊的语法和操作符。 在CUDA C++中,您可以使用CUDA设备函数和CUDA核函数来执行与GPU相关的计算。CUDA设备函数是在GPU上执行的函数,可以从主机代码或其他CUDA设备函数中调用。CUDA核函数是特殊的设备函数,用于在GPU上运行并行计算。在CUDA核函数中,您可以使用CUDA线程索引和其他CUDA特定的语言构造来控制并行计算的执行。 另外,在CUDA C++中,还可以使用一些CUDA特定的内置函数和变量,例如__syncthreads()函数和threadIdx变量,来实现并行计算和内存管理。 以下是一个简单的CUDA C++表达式的示例: ``` __global__ void add(int *a, int *b, int *c) { int tid = threadIdx.x; c[tid] = a[tid] + b[tid]; } int main() { int a[N], b[N], c[N]; int *dev_a, *dev_b, *dev_c; // Allocate memory on the device cudaMalloc((void **)&dev_a, N * sizeof(int)); cudaMalloc((void **)&dev_b, N * sizeof(int)); cudaMalloc((void **)&dev_c, N * sizeof(int)); // Copy input arrays to device memory cudaMemcpy(dev_a, a, N * sizeof(int), cudaMemcpyHostToDevice); cudaMemcpy(dev_b, b, N * sizeof(int), cudaMemcpyHostToDevice); // Launch kernel on the device add<<<1, N>>>(dev_a, dev_b, dev_c); // Copy output array from device memory cudaMemcpy(c, dev_c, N * sizeof(int), cudaMemcpyDeviceToHost); // Free device memory cudaFree(dev_a); cudaFree(dev_b); cudaFree(dev_c); return 0; } ``` 在上面的示例中,我们定义了一个名为add的CUDA核函数,用于将两个数组相加并将结果存储在第三个数组中。我们使用cudaMalloc函数在设备上分配内存,使用cudaMemcpy函数将输入数组复制到设备内存中,然后使用<<<>>>运算符启动核函数。最后,我们使用cudaMemcpy函数将输出数组从设备内存复制回主机内存,然后释放设备内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值