首页 > 编程语言 >C/C++技巧

C/C++技巧

时间:2024-05-18 15:07:28浏览次数:29  
标签:num1 技巧 num2 int C++ num printf cout

1. 三目运算符

语法:表达式1 ? 表达式2 : 表达式3表达式1为真则执行表达式2,否则执行表达式3。相比if语句,三目运算符短小简洁,适当使用可以提高代码可读性。

另外,如果三目运算符返回左值,可以继续赋值。

举例

#include <iostream>
using namespace std;

int main ()
{
    system("chcp 65001"); // 避免终端显示中文乱码

    int num1 = 10;
    int num2 = 20;
    int max = 0;

    cout << "原始num1=" << num1 << " num2=" << num2 << endl;
    max = num1 > num2 ? num1 : num2;
    cout << "较大数值:" << max << endl;
    num1 > num2 ? num1 : num2 = 100; // 左值支持赋值
    cout << "重新赋值后num1=" << num1 << " num2=" << num2 << endl;

    return 0;
}

2. 位运算

计算机中的数在内存中均以二进制形式存储,而位运算直接操作内存二进制位,因此执行效率非常高。

2.1 常用位运算

以下num表示十进制下的整数

  • 获取第i位的数字:(num >> i) & 1
  • 置位第i位:num |= (1 << i)
  • 清零第i位:num &= ~(1 << i)
  • 把第i位取反:num ^= (1 << i)

2.2 使用举例

位运算可以把状态压缩到一个二进制数中,每个bit表示一种状态。常用的位运算操作可以方便控制每个bit的状态,优化程序。

比如可以使用一个uint8_t来表示最多8个判断状态,根据对应的bit位执行相应的操作,比使用一堆bool要优雅很多。

#include <iostream>

void checkStatus(uint8_t checkFlag)
{
    if (1 & (checkFlag >> 0))
    {
        std::cout << "bit0为1,执行对应操作" << std::endl;
    }
    else
    {
        std::cout << "bit0为0,执行对应操作" << std::endl;
    }

    if (1 & (checkFlag >> 1))
    {
        std::cout << "bit1为1,执行对应操作" << std::endl;
    }
    else
    {
        std::cout << "bit1为0,执行对应操作" << std::endl;
    }

    if (1 & (checkFlag >> 2))
    {
        std::cout << "bit2为1,执行对应操作" << std::endl;
    }
    else
    {
        std::cout << "bit2为0,执行对应操作" << std::endl;
    }

    if (1 & (checkFlag >> 3))
    {
        std::cout << "bit3为1,执行对应操作" << std::endl;
    }
    else
    {
        std::cout << "bit3为0,执行对应操作" << std::endl;
    }
}

int main()
{
    system("chcp 65001"); // 避免终端显示中文乱码
    uint8_t checkFlag = 0b0011;

    checkStatus(checkFlag);
    return 0;
}

3 数值的表示

不同的数值表示可以让程序更清晰明了,比如位运算常用二进制、十六进制;对无符号、长整型、浮点数用后缀表示更清晰。

#include <iostream>

int main()
{
    int num1 = 0xa0;
    int num2 = 0b1010;
    int num3 = 023;
    float num4 = 12.f;
    unsigned int num5 = 13u;
    long int num6 = 14l;
    double num7 = 1.2e3;

    printf("num1: 0x%x\n", num1);
    printf("num2: 0x%x\n", num2);
    printf("num3: 0%o\n", num3);
    printf("num4: %.3f\n", num4);
    printf("num5: %u\n", num5);
    printf("num6: %ld\n", num6);
    printf("num7: %.3f\n", num7);

    return 0;
}

标签:num1,技巧,num2,int,C++,num,printf,cout
From: https://www.cnblogs.com/wangxinzhi/p/18199357

相关文章

  • C++学习----make
    基本规则:touchmain.cadd.csub.cadd.hsub.h#新建以上文件main函数:intmain(void){return0;}Makefile文件:main:main.oadd.osub.ogcc-Wall-gmain.oadd.osub.o-omainmain.o:main.cgcc-Wall-g-cmain.c-omain.oadd.o:add.cadd.h......
  • C++学习----gcc
    gcc编译步骤 静态库使用步骤hello_fn.h#ifndef_HELLO_FN_H#define_HELLO_FN_Hvoidhello(constchar*name);#endifhello_fn.c#include<stdio.h>#include"hello_fn.h"voidhello(constchar*name){printf("hello%S!!!\n",name);......
  • Transformers 加速的一些常用技巧
    前言 本文介绍了一些Transformers常用的加速策略。本文转载自DeephubImba仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。CV方向的准研究生们,未来三年如何度过?招聘高光谱图像、语义分割、di......
  • Qt/C++音视频开发74-合并标签图形/生成yolo运算结果图形/文字和图形合并成一个/水印滤
    一、前言在使用yolo做人工智能运算后,运算结果除了一个方框,还可能需要增加文字显示在对应方框上,以便标记是何种物体,比如显示是人还是动物,或者还有可能追踪人员,显示该人员的姓名。这种应用场景非常普遍,而且非常有必要,可以非常直观的直接看到对应移动的物体是什么。当然也有个缺点,就......
  • algo c++ 常用接口
    接口网站cppreferencesetunorder_set//unorder_setunorder_set<T>u_set;//insertu_set.insert(Tt);//findandjudgeiteratorit=u_set.find(Tt);if(u_set.find(t)!=it.end()){}//删除u_set.erase(t);技巧如果想要通过一种数据类型种的值构建另一种......
  • WPS技巧——MARK住
    一、如何对一列数据进行相同操作,比如全都添加双引号https://www.jiachong.com/wps/340708.html1.首先打开表格,按Ctrl+C复制第一个单元格内容,2.然后把复制的单元格内容按Ctrl+V粘贴到与其齐平的空白单元格里(即辅助列),在辅助列的单元格内容中输入双引号,3.最后将鼠标点击到......
  • C++读取配置文件
    1、读取=号的配置文件(或者:)的配置。#include<iostream>#include<fstream>#include<sstream>#include<map>#include<string>std::map<std::string,std::string>read_config(conststd::string&filename){std::map<std::st......
  • 交流沟通技巧2
    一,生气时,一定要安抚好别人的情绪,在进行交流沟通。自己生气时也一定要先平息自己的心情那么如何安抚好别人的情绪呢??? 1.倾听和理解:倾诉具有一种积极的心理效应情绪的宣泄:倾诉提供了一个出口,让生气的情绪得以宣泄。通过表达愤怒、不满或困扰,我们可以释放内心的压力,减少紧张感和......
  • Transformers 加速的一些常用技巧
    前言 本文介绍了一些Transformers常用的加速策略。本文转载自DeephubImba仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。CV方向的准研究生们,未来三年如何度过?招聘高光谱图像、语义分割、di......
  • C++ 初始化列表(Initialization List)
    请注意以下继承体系中各class的constructors写法:1classCPoint2{3public:4CPoint(floatx=0.0)5:_x(x){}67floatx(){return_x;}8voidx(floatxval){_x=xval;}9protected:10float_x;11};1213classCPoint2d:......