学习
实践
活动
专区
工具
TVP
写文章

C语言操作(一)

还有上次的C语言面试题目还有两篇文章没写完,刚好周末有时间来整理,明天给大家分享出来。每天进步一点点,日积月累你也是专家。 3、取反: 取反的符号是" ~",也是稍微注意一下和逻辑取反的形式:C语言取反是" ~ ",C语言中的逻辑取反是" ! "。 按取反是将操作数的二进制逐个按取反(1变成0,0变成1);而逻辑取反是真(在C语言中只要不是0的任何数都是真)变成假(在C语言中只有0表示假)、假变成真。 b = ~~a; // 按取反,逐个位操作,1变0,0变1     c = !! 2、左移位"<<" 与右移位">>"总结: C语言的移位要取决于数据类型。 对于无符号数,左移时右侧补0(相当于逻辑移位)。 对于无符号数,右移时左侧补0(相当于逻辑移位)。

25030

C语言操作(二)

今天给大家继续分享C语言里面的操作;这个礼拜熟悉了一下公司代码,第一次看内核代码的感受就是(看的是 rtos——threadx 和 Linux),C 语言基础要好,不然看源代码很是难受,而且一般企业里面的项目都是非常庞大的 ,所有的一切都要靠自己去理解,所以的话平时一些c语言基础要掌握好,比如说:指针,二级指针,函数指针,指针函数,结构体数组指针,结构体指针数组,数组指针,指针数组,结构体等,甚至一些 GNU 里面的c 语言用法 C++和C这种语言是真的好,很强大分享,很香。 \n", c);         return 0;  } 输出结果:   a & b = 0x123d0cf7. 注意:bit是用bit0开始的。 这种用法,用的比较多,比如说用"<<"(左移操作)和">>"(右移操作)移位操作来获得自己想要的目标结果,而且还会和我们上面讲的操作符来结合使用;这里我们来看两个例子: 获取bit3~bit7为1,同时

17860
  • 广告
    关闭

    热门业务场景教学

    个人网站、项目部署、开发环境、游戏服务器、图床、渲染训练等免费搭建教程,多款云服务器20元起。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言域(bit fields)的可移植问题

    网上有文章说C语言的“域”(bit fields)有可移植性的问题,原因是不同的编译器对位域的实现不同。   我决定用实验验证一下。  一、 实验过程:   1. 准备实验程序   这 是谭浩强C语言课本上第12章12.2节的域示例程序: main() {   struct bs   {   unsigned a:1;   unsigned b:3;   unsigned ,32C编译器   运行结果:   a=1 b=7 c=8 d=0x70   e=0x5060 f=0x10203040   *(unsigned long*)(&bit) = 5060708f 在这里我想说说两种语言C/C++语言编写的程序里数据存储顺序是跟编译平台所在的CPU相关的,而JAVA编写的程序则唯一采用big endian方式来存储数据。 试想,如果你用C/C++语言在x86平台下编写的程序跟别人的JAVA程序互通时会产生什么结果?

    8910

    C语言操作 | 按运算符

    二进制数、、字节 PS:运算详见计算机科学导论 前言: C语言中可以单独操控变量中的,例如:通常向硬件设备发送一两个字节来操控这些设备,每个位(bit)都有特定的含义,另外,与文件相关的操作信息经常被存储 许多的压缩和加密操作都是直接除理单独的。 高级语言一般不会处理这些级别的细节,C在提供高级语言便利的同时,还能在为汇编语言所保留的级别上工作。 二进制整数 C语言用字节(byte)表示存储系统字符集所需要的大小,所以C字节看可能是8,9,16或者其他值。不过藐视存储芯片和数据率中所用的字节指的是8字节。 例如: C unsigned char//用一个字节表示的范围是0~255 signed char//用一个字节表示的范围是-128~+128 有符号整数 如何表示有符号整数取决于硬件,而不是C语言。 用法:打开 用法:关闭(清空位) 用法:切换位 用法:检查的值 移位运算符 示例 字段 示例 字段和按运算符 对齐特性(C11)

    13130

    C语言笔记】操作的技巧

    一、操作的方法 操作有两种方法,一种是字段,另一种是使用按运算符。字段的方法可查看往期笔记:【C语言笔记】域。本文介绍使用按运算符操作的方法。下表为几种操作符及其含义: ? 当我们要设置第0bit0的值为1时,可能会这样进行设置: TEST = 0x01; 但是,这样设置是不够准确的,因为这时候已经同时操作到了高7bit1~bit7,如果这高7没有用到的话,这么设置没有什么影响 在实际编程中,常改写为: TEST |= 0x01; 这种写法可以一定程度上简化代码,是 C 语言常用的一种编程风格。 同样的,要给TEST的低4清0,高4保持不变,可以进行如下配置: TEST &= 0xF0; 这个场景嵌入式开发中经常使用,方法就是先对需要设置的用&操作符进行清零操作,然后用|操作符设值。 0X00000040; //设置相应的值,不改变其他的值 移位操作提高代码的可读性。

    1.1K20

    MCU_STM32的操作bit banding

    操作 STM32芯片除了通用的寄存器访问,还有一个比较有意思的操作。 这个位带的意思,就是每个比特(bit)膨胀成一个32的字(word),当访问这些字的时候就达到了访问“”的目的,这就是操作操作一个典型的特点,就是把1个映射到32,在程序处理中方便操作具体位,典型的如RCC寄存器,需要逐操作的地方比较多,直接寄存器操作的话,程序的可读性不强; 操作的缺点也很明显,就是在时间上开销也要稍大一些 The alias word at 0x2200001C maps to bit [7] of the bit-band byte at 0x20000000: 0x2200001C = 0x22000000 (0x0*32) + 0*4 = 0x22000000 0x20000000的bit[7] 带字节映射计算: = 0x22000000 + (0x0*32) + 7*4 = 0x2200001C

    12030

    c程序段-C语言 运算:

    我们现在要学的是运算里面的段。   那么什么是段呢?下面的截图就是段的解释和一个例子。    可以直接用段的成员名称来访问   比移位、与、或还方便   编译器会安排其中的的排列,不具有可移植性   当所需的超过一个int时会采用多个int   所以说我们的段就是运用于比较底层的位置,和直接操作硬件的场合 可变数组:可变数组   我们的c语言的数组都是固定大小的。   但是那是在我们运行过程当中,如果开始或结束是可以的。    我们可以做一个函数库,我们先定义一些函数c程序段,也就是上面的这些,   当然所有的都是array开头,   create:表示的是创建一个数组,   free:表示的是我们会把那一个数组的空间回收。

    6720

    c语言程序个位,C语言字段

    字段(bit-field)是一个由具有特定数量的组成的整数变量。结构或联合的成员也可以是字段。如果连续声明多个小的字段,编译器会将它们合并成一个机器字(word)。 当然,也可以使用运算符来独立处理特定位,但是字段允许我们利用名称来处理,类似于结构或联合的成员。 但是,如果声明了一个无名称的字段,就没有办法获取它。没有名称的字段只能用于填充(padding),以帮助后续的字段在机器字中对齐到特定的地址边界。(3) 宽度字段中的数量。 宽度必须是一个常量整数表达式,其值是非负的,并且必须小于或等于指定类型的宽。无名称字段的宽度可以是 0。在这种情况下,下一个声明的字段就会从新的可寻址内存单元开始。 如果紧接着的字段适合同一内存单元中剩下的空间,那么就被定义到与前面的字段紧邻的位置。

    16110

    C语言笔记】

    正是基于这种考虑,C语言又提供了一种数据结构,叫做域或段。 域是操控的一种方法(操控的另一种方法是使用按运算符,按运算符将在之后的笔记中做介绍)。 而结构体变量pk2的各成员超出了限定的位数,并发生了上溢(溢出中的一种),关于溢出的概念可查看往期笔记:【C语言笔记】整数溢出 C语言标准规定,只有有限的几种数据类型可以用于域。 关于C语言的几套标准可查看往期笔记:【C语言笔记】什么是ANSI C标准? 域的存储 域的存储同样遵循结构体内存对齐的规则,关于结构体内存对齐的问题可查看往期笔记:【C语言笔记】C语言结构体内存对齐问题 看一个例子: #include <stdio.h> struct pack (此处为unsigned类型所占的字节数)内,即4个字节内,所以struct pack类型的变量所占的字节长度为4个字节(实际a、b、c一共占用12bit,还有20bit空间为保留的空白)。

    91630

    C语言、嵌入式操作精华技巧大汇总

    下面进行举例说明,假如有一个8的TEST寄存器: ======022 当我们要设置第0bit0的值为1时,可能会这样进行设置: TEST = 0x01; 但是,这样设置是不够准确的,因为这时候已经同时操作到了高 在实际编程中,常改写为: TEST |= 0x01; 这种写法可以一定程度上简化代码,是 C 语言常用的一种编程风格。 同样的,要给TEST的低4清0,高4保持不变,可以进行如下配置: TEST &= 0xF0; 二、嵌入式中操作一些常见用法 1、一个32bit数据的、字节读取操作 (1)获取单字节: #define : #define SET_BIT(x, bit) (x |= (1 << bit)) /* 置bit */ ======011 ======012 4、判断某一或某几位连续的值 ODR &= ~(1 << 10); /* PA10输出低(清0操作) */ 也可用我们上面的置、清零的宏定义: SET_BIT(GPIOA->ODR, 10); /* PA10输出高(置1操作

    76621

    c语言中按异或运算_c语言与怎么算

    “与”运算符 (&) 会将第一操作数的每一与第二操作数的相应进行比较。如果两个位均为 1,则对应的结果位将设置为 1。否则,将对应的结果位设置为 0。 按与或运算符:| 语法 expression | expression 备注 按“与或”运算符 (|) 将第一个操作数的每个位与第二个操作数的对应进行比较。 如果其中一个是 1,则将对应的结果位设置为 1。否则,将对应的结果位设置为 0。 按“与或”运算符的两个操作数必须为整型。 算术转换中涵盖的常用算术转换适用于操作数。 按异或运算符:^ 语法 expression ^ expression 备注 按“异或”运算符 (^) 将第一操作数的每个位与第二操作数的相应进行比较。 如果一个是 0,另一个是 1,则相应的结果位将设置为 1。否则,将对应的结果位设置为 0。 按“异或”运算符的两个操作数都必须为整型。 算术转换中涵盖的常用算术转换适用于操作数。

    13340

    聊一聊C语言

    主要原因是:有些信息在存储时,只需占几个或一个二进制bit),并不需要占用一个完整的字节。例如,在存放一个开关量时,只有0和1两种状态,用一二进位即可。 为了节省存储空间,并使处理简便,C语言提供了一种数据结构,称为“域”或“段”。 1、概念和定义 域:是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。 每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制域来表示。 4 } 在这个位域定义中,a 占第一字节的 4 ,后 4 填 0 表示不使用,b 从第二字节开始,占用 4 c 占用 4 。 注意:域成员往往不占用完整的字节,有时候也不处于字节的开头位置,因此使用&获取域成员的地址是没有意义的,C语言也禁止这样做。地址是字节(Byte)的编号,而不是bit)的编号。

    13620

    C语言 | 学习按取反-

    “要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人…万中无一” ——包租婆 这道理放在C语言学习上也一并受用。 在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是日积月累的学习。 那么如何学习呢?当然是每天都练习一道C语言题目!! ? 作者 闫小林 白天搬砖,晚上做梦。 例93:学习C语言使用按取反~。 解题思路:正数取反是先将初始数值转换成二进制数(6==》00000110),再对二进制数的每一取反:即将0变为1、将1变为0。 11111001),得到的是最终结果的补码,要转换为最终结果的原码则需再次取补码,就能得到计算结果;负数取反是先将初始数值转换成二进制数(以-6为例,10000110),再取得二进制数的补码,之后对补码的每一取反 C语言源代码演示: 学习使用按取反~。

    64132

    关注

    腾讯云开发者公众号
    10元无门槛代金券
    洞察腾讯核心技术
    剖析业界实践案例
    腾讯云开发者公众号二维码

    相关产品

    • 智聆口语评测(中文版)

      智聆口语评测(中文版)

      腾讯云智聆口语评测(中文版)是腾讯云推出的中文口语评测产品。支持从儿童到成人全年龄覆盖的普通话语音评测,支持字词、句子等多种模式,支持发音准确度(GOP),流利度,完整度等全方位打分机制,专家打分相似度 95% 以上。

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券