C语言中的(uint32)1<<10 是啥意思?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中的(uint32)1<<10 是啥意思?相关的知识,希望对你有一定的参考价值。

谢谢Jseven_jy等各位。象以下这种宏定义有什么优势之处?
#define xxxCLK (uint32)1<<10
#define xxxDOUT (uint32)1<<6

C语言中的(uint32)1<<10意思无符号32位整型量 1,向左移10位。

c语言中uint是共用体类型结构,在结构中各成员有各自的内存空间,一个结构体变量的总长度大于等于各成员长度之和。而在“联合”中,各成员共享一段内存空间,一个联合变量的长度等于各成员中最长的长度。

联合类型的定义和联合变量的说明:一个联合类型必须经过定义之后,才能把变量说明为该联合类型。

扩展资料

uint联合类型的定义:

union 联合名

成员表

;

成员表中含有若干成员,成员的一般形式为: 类型说明符 成员名

成员名的命名应符合标识符的规定。

例如:

union perdata

int Class;

char Office;

;

参考技术A (uint32)1<<10 -- 无符号32位整型量 1,左移10位。

这种宏定义优点 是
xxxCLK,xxxDOUT 名字一目了然,编写程序的人,一看就知道它的 数学和物理 意思,
(uint32)1<<10 一看,就知道 右起 第11位 是 1,其余 位是 0
(uint32)1<<6 一看,就知道 右起 第7位 是 1,其余 位是 0

这种写法有可能有负作用,如果我写则用 #define xxxCLK ( (uint32)1<<10)
或干脆写
#define xxxCLK 0x0400
#define xxxDOUT 0x0040本回答被提问者采纳
参考技术B (uint32)1<<10表示将无符号32位整型数1左移10位。

具体的操作方法如下:
1的二进制数为:0000 0000 0000 0000 0000 0000 0000 0001
1<<10运算后变为:0000 0000 0000 0000 0000 0100 0000 0000 对应十进制的1024
参考技术C 左移操作

1有二进制: 00000000 00000000 00000000 00000001
左移10位之后变成: 00000000 00000000 00000100 00000000
结果就从1变成了2的10次方,即1024

#define xxxCLK (uint32)1<<10
#define xxxDOUT (uint32)1<<6
这两句是宏定义,也就是说再下面的程序中出现的xxxCLK表示的是 (uint32)1<<10
同样,xxxDOUT表示的是 (uint32)1<<6

好处是一改全改。。。。如果你需要修改这个参数或者变量的值。。。你只需要在#define xxxCLK (uint32)1<<10
这个地方改就可以了。。。不用到程序里面去改。。。

如果不用宏定义的话。。。你需要把程序里面每个出现的位置都修改。。。容易漏掉。。。也比较麻烦。。。

希望能帮到你。。。
参考技术D 左移操作,把二进制的1左移10位,相当于2的10次方

以上是关于C语言中的(uint32)1<<10 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

C语言编程中的指针

stm32开发,C语言, 跳转执行中断函数,会保存原来函数的局部变量吗

C语言中的一个指令语句,不理解其意思,求详解

C语言在STM32中的内存分配

C语言实现x的n次方

三日一练-C语言百题(007)