Arduino 语法手册结构部分.docx

上传人:牧羊曲112 文档编号:3152934 上传时间:2023-03-11 格式:DOCX 页数:26 大小:50.25KB
返回 下载 相关 举报
Arduino 语法手册结构部分.docx_第1页
第1页 / 共26页
Arduino 语法手册结构部分.docx_第2页
第2页 / 共26页
Arduino 语法手册结构部分.docx_第3页
第3页 / 共26页
Arduino 语法手册结构部分.docx_第4页
第4页 / 共26页
Arduino 语法手册结构部分.docx_第5页
第5页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Arduino 语法手册结构部分.docx》由会员分享,可在线阅读,更多相关《Arduino 语法手册结构部分.docx(26页珍藏版)》请在三一办公上搜索。

1、Arduino 语法手册结构部分Arduino 语法手册 摘自:http:/wiki.geek- Arduino 的程序可以划分为三个主要部分:结构、变量、函数。 结构部分 setup 在Arduino中程序运行时将首先调用 setup 函数。用于初始化变量、设置针脚的输出输入类型、配置串口、引入类库文件等等。每次 Arduino 上电或重启后,setup 函数只运行一次。 示例 int buttonPin = 3; void setup Serial.begin(9600); pinMode(buttonPin, INPUT); void loop / . loop 在 setup 函数中初

2、始化和定义了变量,然后执行 loop 函数。顾名思义,该函数在程序运行过程中不断的循环,根据一些反馈,相应改变执行情况。通过该函数动态控制 Arduino 主控板。 示例 int buttonPin = 3; / setup 中初始化串口和按键针脚. void setup beginSerial(9600); pinMode(buttonPin, INPUT); / loop 中每次都检查按钮,如果按钮被按下,就发送信息到串口 void loop if (digitalRead(buttonPin) = HIGH) serialWrite(H); else serialWrite(L); de

3、lay(1000); 结构控制 if if和 =、!=、 if 语句与比较运算符一起用于检测某个条件是否达成,如某输入值是否在特定值之上等。if 语句的语法是: if (someVariable 50) / 执行某些语句 本程序测试 someVariable 变量的值是否大于 50。当大于 50 时,执行一些语句。换句话说,只要 if 后面括号里的结果为真,则执行大括号中的语句;若为假,则跳过大括号中的语句。 if 语句后的大括号可以省略。若省略大括号,则只有一条语句成为执行语句。 if (x 120) digitalWrite(LEDpin, HIGH); if (x 120) digita

4、lWrite(LEDpin, HIGH); if (x 120) digitalWrite(LEDpin, HIGH); if (x 120) digitalWrite(LEDpin1, HIGH); digitalWrite(LEDpin2, HIGH); / 以上所有书写方式都正确 在小括号里求值的表达式,需要以下操作符: 比较运算操作符: x = y x != y x y x = y 警告: 注意使用赋值的值设为 10。两个“=”表示的是比较运算符运算符的情况。一个“=”表示的是赋值运算符,作用是将 x,用于测试 x 和 10 是否相等。后面这个语句只有 x 是 10 时才为真,而前面赋

5、值的那个语句则永远为真。 这是因为 C 语言按以下规则进行运算 if (x=10):10 赋值给 x,因此 x 现在值为 10。此时 if 的测试表达式值为 10,该值永远为真,因为非 0 值永远为真。所以,if (x = 10) 将永远为真,这就不是我们运行 if 所期待的结果。另外,x 被赋值为 10,这也不是我们所期待的结果。 if 的另外一种分支条件控制结构是 if.else 形式。 if.else if/else是比if更为高级的流程控制语句,它可以进行多次条件测试。比如,检测模拟输入的值,当它小于500时该执行哪些操作,大于或等于500时执行另外的操作。代码如下: if (pinF

6、iveInput 500) / 执行A操作 else / 执行B操作 else可以进行额外的if检测,所以多个互斥的条件可以同时进行检测。 测试将一个一个进行下去,直到某个测试结果为真,此时该测试相关的执行语句块将被运行,然后程序就跳过剩下的检测,直接执行到if/else的下一条语句。当所有检测都为假时,若存在else语句块,将执行默认的else语句块。 注意else if语句块可以没有else语句块。else if分支语句的数量无限制。 if (pinFiveInput = 1000) / 执行B操作 else / 执行C操作 另外一种进行多种条件分支判断的语句是switch case语句。

7、 for 描述 for语句用于重复执行一段在花括号之内的代码。通常使用一个增量计数器计数并终止循环。for语句用于重复性的操作非常有效,通常与数组结合起来使用来操作数据、引脚。 for循环开头有3个部分: /语句 “初始化”只在循环开始执行一次。每次循环,都会检测一次条件;如果条件为真,则执行语句和“增量计数”,之后再检测条件。当条件为假时,循环终止。 例子 /用PWM引脚将LED变暗 int PWMpin = 10; /将一个LED与47电阻串联接在10脚 void setup /无需设置 void loop for (int i=0; i = 255; i+) analogWrite(PW

8、Mpin, i); delay(10); 编程提示 C语言的for循环语句比BASIC和其他电脑编程语言的for语句更灵活。除了分号以外,其他3个元素都能省略。同时,初始化,条件,增量计算可以是任何包括无关变量的有效C语句,任何C数据类型包括float。这些不寻常的for语句可能会解决一些困难的编程问题。 例如,在增量计数中使用乘法可以得到一个等比数列: for(int x = 2; x -1; i = i + x) analogWrite(PWMpin, i); if (i = 255) x = -1; / 在峰值转变方向 delay(10); switch case 和if语句相同,swi

9、tchcase通过程序员设定的在不同条件下执行的代码控制程序的流程。特别地,switch语句将变量值和case语句中设定的值进行比较。当一个case语句中的设定值与变量值相同时,这条case语句将被执行。 关键字break可用于退出switch语句,通常每条case语句都以break结尾。如果没有break语句,switch语句将会一直执行接下来的语句直到遇见一个break,或者直到switch语句结尾。 例子 switch (var) case 1: /当var等于1时,执行一些语句 break; case 2 /当var等于2时,执行一些语句 break; default: /如果没有任何

10、匹配,执行default /default可有可不有 语法 switch (var) case label: / 声明 break; case label: / 声明 break; default: / 声明 参数 var:用于与下面的case中的标签进行比较的变量值 label: 与变量进行比较的值 while 描述 while循环会无限的循环,直到括号内的判断语句变为假。必须要有能改变判断语句的东西,要不然while循环将永远不会结束。这在您的代码表现为一个递增的变量,或一个外部条件,如传感器的返回值。 语法 while(表达) /语句 参数 表达:为真或为假的一个计算结果 例子 var

11、= 0; while(var 200) /重复一件事200遍 var+ do. while dowhile循环与while循环运行的方式是相近的,不过它的条件判断是在每个循环的最后,所以这个语句至少会被运行一次,然后才被结束。 do /语句 while; 例子 do delay;/等待传感器稳定 X = readSensors;/检查传感器取值 while; /当x小于100时,继续运行 break break用于退出do,for,while循环,能绕过一般的判断条件。它也能够用于退出switch语句。 例子 for(x = 0; x threshold) / 超出探测范围 x = 0; br

12、eak; delay(50); continue continue语句跳过当前循环中剩余的迭代部分。它通过检查循环条件表达式,并继续进行任何后续迭代。 例子 for (x = 0; x 40 & x 400) return 1; else return 0; return关键字可以很方便的测试一段代码,而无需“comment out(注释掉)”段的可能存在bug的代码。 void loop 大 /写入漂亮的代码来测试这里。 return; /剩下的功能异常的程序 /return后的代码永远不会被执行 goto 程序将会从程序中已有的标记点开始运行 语法 label: goto label; /

13、从label处开始运行 提示 不要在C语言中使用goto编程,某些C编程作者认为goto语句永远是不必要的,但用得好,它可以简化某些特定的程序。许多程序员不同意使用goto的原因是, 通过毫无节制地使用goto语句,很容易创建一个程序,这种程序拥有不确定的运行流程,因而无法进行调试。 的确在有的实例中goto语句可以派上用场,并简化代码。例如在一定的条件用if语句来跳出高度嵌入的for循环。 例子 for(byte r = 0; r -1; g-) for(byte b = 0; b 250) goto bailout; /更多的语句. bailout: 扩展语法 ; 用于表示一句代码的结束。

14、 例子: int a = 13; 提示 在每一行忘记使用分号作为结尾,将导致一个编译错误。错误提示可能会清晰的指向缺少分号的那行,也可能不会。如果弹出一个令人费解或看似不合逻辑的编译器错误,第一件事就是在错误附近检查是否缺少分号。 大括号是C编程语言中的一个重要组成部分。它们被用来区分几个不同的结构,下面列出的,有时可能使初学者混乱。 左大括号“”必须与一个右大括号“”形成闭合。这是一个常常被称为括号平衡的条件。在Arduino IDE中有一个方便的功能来检查大括号是否平衡。只需选择一个括号,甚至单击紧接括号的插入点,就能知道这个括号的“伴侣括号”。 目前此功能稍微有些错误,因为IDE会经常会

15、认为在注释中的括号是不正确的。 对于初学者,以及由BASIC语言转向学习C语言的程序员,经常不清楚如何使用括号。毕竟,大括号还会在”return函数”、“endif条件句”以及“loop函数”中被使用到。 由于大括号被用在不同的地方,这有一种很好的编程习惯以避免错误:输入一个大括号后,同时也输入另一个大括号以达到平衡。然后在你的括号之间输入回车,然后再插入语句。这样一来,你的括号就不会变得不平衡了。 不平衡的括号常可导致许多错误,比如令人费解的编译器错误,有时很难在一个程序找到这个错误。由于其不同的用法,括号也是一个程序中非常重要的语法,如果括号发生错误,往往会极大地影响了程序的意义。 大括号

16、中的主要用途 功能 void myfunction(datatype argument) statements(s) 循环 while (boolean expression) statement(s) do statement(s) while (boolean expression); for (initialisation; termination condition; incrementing expr) statement(s) 条件语句 if (boolean expression) statement(s) else if (boolean expression) stateme

17、nt(s) else statement(s) / Comments 注释用于提醒自己或他人程序是如何工作的。它们会被编译器忽略掉,也不会传送给处理器,所以它们在Atmega芯片上不占用体积。注释的唯一作用就是使你自己理解或帮你回忆你的程序是怎么工作的或提醒他人你的程序是如何工作的。编写注释有两种写法: 例子 x = 5; / 这是一条注释斜杠后面本行内的所有东西是注释 /* 这是多行注释-用于注释一段代码 if (gwb = 0) / 在多行注释内可使用单行注释 x = 3; /* 但不允许使用新的多行注释-这是无效的 / 别忘了注释的结尾符号-它们是成对出现的! */ 小提示 当测试代码的

18、时候,注释掉一段可能有问题的代码是非常有效的方法。这能使这段代码成为注释而保留在程序中,而编译器能忽略它们。这个方法用于寻找问题代码或当编译器提示出错或错误很隐蔽时很有效。 /* */ Comments 注释用于提醒自己或他人程序是如何工作的。它们会被编译器忽略掉,也不会传送给处理器,所以它们在Atmega芯片上不占用体积。注释的唯一作用就是使你自己理解或帮你回忆你的程序是怎么工作的或提醒他人你的程序是如何工作的。编写注释有两种写法: 例子 x = 5; / 这是一条注释斜杠后面本行内的所有东西是注释 /* 这是多行注释-用于注释一段代码 if (gwb = 0) / 在多行注释内可使用单行注

19、释 x = 3; /* 但不允许使用新的多行注释-这是无效的 / 别忘了注释的结尾符号-它们是成对出现的! */ 小提示 当测试代码的时候,注释掉一段可能有问题的代码是非常有效的方法。这能使这段代码成为注释而保留在程序中,而编译器能忽略它们。这个方法用于寻找问题代码或当编译器提示出错或错误很隐蔽时很有效。 #define #define 是一个很有用的C语法,它允许程序员在程序编译之前给常量命名。在Arduino中,定义的常量不会占用芯片上的任何程序内存空间。在编译时编译器会用事先定义的值来取代这些常量。 然而这样做会产生一些副作用,例如,一个已被定义的常量名已经包含在了其他常量名或者变量名中

20、。在这种情况下,文本将被defined 定义的数字或文本所取代。 通常情况下, 优先考虑使用 const 关键字替代 #define 来定义常量。 Arduino 拥有和 C 相同的语法规范: 语法 #define 常量名 常量值注意,是必须的。 例子 #define ledPin 3 /在编译时,编译器将使用数值 3 取代任何用到 ledPin 的地方。 提示 在#define 声明后不能有分号。如果存在分号,编译器会抛出语义不明的错误,甚至关闭页面。 #define ledPin 3 ; /这是一种错误写法 类似的,在#define声明中包含等号也会产生语义不明的编译错误从而导致关闭页面。

21、 #define ledPin = 3 /这是一种错误写法 #include #include用于调用程序以外的库。这使得程序能够访问大量标准C库,也能访问用于arduino的库。 AVR C库语法手册请点击这里。注意#include和#define一样,不能在结尾加分号,如果你加了分号编译器将会报错。 例子 此例包含了一个库,用于将数据存放在flash空间内而不是ram内。这为动态内存节约了空间,大型表格查表更容易实现 #include prog_uint16_t myConstants PROGMEM = 0, 21140, 702 , 9128, 0, 25764, 8456, 0,0,

22、0,0,0,0,0,0,29810,8968,29762,29762,4500; 算数运算符 = = 赋值运算符 将等号右边的数值赋值给等号左边的变量 在C语言中,单等号被称为赋值运算符,它与数学上的等号含义不同,赋值运算符告诉单片机,将等号的右边的数值或计算表达式的结果,存储在等号左边的变量中。 例子: int sensVal; /声明一个名为sensVal的整型变量 senVal = analogRead; /将模拟引脚0的输入电压存储在SensVal变量中 编程技巧: 要确保赋值运算符左侧的变量能够储存右边的数值。如果没有大到足以容纳右边的值,存储在变量中的值将会发生错误。 不要混淆赋值

23、运算符=与比较运算符=,认为这两个表达式是相等的。 + - * / 加,减,乘,除 描述 这些运算符返回两个操作数的和,差,乘积,商. 这些运算是根据操作数的数据类型来计算的,比如 9和4都是int类型,所以9 / 4 结果是 2.这也就代表如果运算结果比数据类型所能容纳的范围要大的话,就会出现溢出.(例如. 1加上一个整数 int类型 32,767 结果变成-32,768). 如果操作数是不同类型的,结果是”更大”的那种数据类型. 如果操作数中的其中一个是 float类型或者double类型, 就变成了浮点数运算. 例子 y = y + 3; x = x - 7; i = j * 6; r

24、= r / 5; Syntax result = value1 + value2; result = value1 - value2; result = value1 * value2; result = value1 / value2; Parameters: value1: 任何常量或者变量 value2: 任何常量或者变量 编程小提示: 整型常量的默认值是int类型,所以一些整型常量(定义中)的计算会导致溢出.(比如: 60 * 1000 会得到一个负数结果.那么if(60*1000 0) ,if得到的是一个false值. 在选择变量的数据类型时,一定要保证变量类型的范围要足够大,以至于

25、能容纳下你的运算结果. 要知道你的变量在哪个点会”翻身”,两个方向上都得注意.如: (0 - 1) 或 (0 - - 32768) 一些数学上的分数处理,要用浮点数,但其缺点是:占用字节长度大,运算速度慢. 使用类型转换符,例如 (int)myFloat 将一个变量强制转换为int类型. % 描述 一个整数除以另一个数,其余数称为模。它有助于保持一个变量在一个特定的范围(例如数组的大小)。 语法 结果=被除数除数 参数 被除数:一个被除的数字 除数:一个数字用于除以其他数 返回 余数 举例 X = 7%5; / X为2 X = 9% 5;/ X为4 X = 5% 5;/ X为0 X = 45;

26、 / X为4 示例代码 /*通过循环计算1到10的模*/ int values10; int i = 0; void setup void loop values i = analogRead; i =10; /取模运算 提示 模运算符对浮点数不起作用。 比较运算符 = != = if和 =、!=、 if 语句与比较运算符一起用于检测某个条件是否达成,如某输入值是否在特定值之上等。if 语句的语法是: if (someVariable 50) / 执行某些语句 本程序测试 someVariable 变量的值是否大于 50。当大于 50 时,执行一些语句。换句话说,只要 if 后面括号里的结果为

27、真,则执行大括号中的语句;若为假,则跳过大括号中的语句。 if 语句后的大括号可以省略。若省略大括号,则只有一条语句成为执行语句。 if (x 120) digitalWrite(LEDpin, HIGH); if (x 120) digitalWrite(LEDpin, HIGH); if (x 120) digitalWrite(LEDpin, HIGH); if (x 120) digitalWrite(LEDpin1, HIGH); digitalWrite(LEDpin2, HIGH); / 以上所有书写方式都正确 在小括号里求值的表达式,需要以下操作符: 比较运算操作符: x =

28、y x != y x y x = y 警告: 注意使用赋值运算符的情况。一个“=”表示的是赋值运算符,作用是将 x 的值设为 10。两个“=”表示的是比较运算符,用于测试 x 和 10 是否相等。后面这个语句只有 x 是 10 时才为真,而前面赋值的那个语句则永远为真。 这是因为 C 语言按以下规则进行运算 if (x=10):10 赋值给 x,因此 x 现在值为 10。此时 if 的测试表达式值为 10,该值永远为真,因为非 0 值永远为真。所以,if (x = 10) 将永远为真,这就不是我们运行 if 所期待的结果。另外,x 被赋值为 10,这也不是我们所期待的结果。 if 的另外一种分

29、支条件控制结构是 if.else 形式。 布尔运算符 & | ! 这些运算符可以用于if条件句中。 & 只有两个运算对象为“真”,才为“真”,如: if (digitalRead(2) = HIGH & digitalRead(3) = HIGH) / 读取两个开关的电平 / . 如果当两个输入都为高电平,则为“真”。 | 只要一个运算对象为“真”,就为“真”,如: if (x 0 | y 0) / . 如果x或y是大于0,则为“真”。 ! 如果运算对象为“假”,则为“真”,例如 if (!x) / . 如果x为“假”,则为真。 警告 千万不要误以为,符号为&(单符号)的位运算符”与”就是布尔

30、运算符的“与”符号为&。他们是完全不同的符号。 同样,不要混淆布尔运算符|与位运算符“或”符号为| 。 位运算符看起来与布尔运算符not有很大的差别!,但你还是要确定哪一个运算符是你想要的。 举例 if (a = 10 & a = 20) / 如果a的值在10至20之间,则为“真” 指针运算符 * 取消引用运算符 & 引用运算符 指针运算符 & (取地址) and * (取地址所指的值) 指针对C语言初学者来说是一个比较复杂的内容,但是编写大部分arduino代码时可以不用涉及到指针。然而,操作某些数据结构时,使用指针能够简化代码,但是指针的操作知识很难在工具书中找到。 位运算符 & (bit

31、wise and) | (bitwise or) (bitwise xor) Bitwise AND (&), Bitwise OR (|), Bitwise XOR () 按位与 按位操作符对变量进行位级别的计算。它们能解决很多常见的编程问题。下面的材料大多来自这个非常棒的按位运算指导。 说明和语法 下面是所有的运算符的说明和语法。进一步的详细资料,可参考教程。 按位与(&) 位操作符与在C + +中是一个&符,用在两个整型变量之间。按位与运算符对两侧的变量的每一位都进行运算,规则是:如果两个运算元都是1,则结果为1,否则输出0.另一种表达方式: 0 0 1 1 运算元1 0 1 0 1 运

32、算元2 - 0 0 0 1-返回结果 在Arduino中,int类型为16位,所以在两个int表达式之间使用&会进行16个并行按位与计算。代码片段就像这样: int a = 92; /二进制: 0000000001011100 int b = 101; / 二进制: 0000000001100101 int c = a & b; / 结果: 0000000001000100, 或10进制的68 a和b的16位每位都进行按位与计算,计算结果存在c中,二进制结果是01000100,十进制结果是68. 按位与最常见的作用是从整型变量中选取特定的位,也就是屏蔽。见下方的例子。 按位或 按位或操作符在C

33、+中是|。和&操作符类似,|操作符对两个变量的为一位都进行运算,只是运算规则不同。按位或规则:只要两个位有一个为1则结果为1,否则为0。换句话说: 0 0 1 1 运算元1 0 1 0 1 运算元2 - 0 1 1 1 - 返回的结果 这里是一个按位或运算在C + +代码片段: int a = 92; / 二进制: 0000000001011100 int b = 101; /二进制: 0000000001100101 int c = a | b; / 结果: 0000000001111101, 或十进制的125 示例程序 按位与和按位或运算常用于端口的读取-修改-写入。在微控制器中,一个端口

34、是一个8位数字,它用于表示引脚状态。对端口进行写入能同时操作所有引脚。 PORTD是一个内置的常数,是指0,1,2,3,4,5,6,7数字引脚的输出状态。如果某一位为1,着对应管脚为HIGH。因此如果我们这样写,PORTD=B00110001;则引脚2、3、7状态为HIGH。这里有个小陷阱,我们可能同时更改了引脚0、1的状态,引脚0、1是Arduino串行通信端口,因此我们可能会干扰通信。 我们的算法的程序是: 读取PORT并用按位与清除我们想要控制的引脚 用按位或对PORTD和新的值进行运算 int i; / 计数器 int j; void setup DDRD = DDRD | B1111

35、1100; /设置引脚27的方向,0、1脚不变(xx|00=xx) /效果和pinMode(pin,OUTPUT)设置27脚为输出一样 serial.begin; void loop for (i=0; i64; i+) PORTD = PORTD & B00000011; / 清除27位,0、1保持不变 j = (i 2); /将变量左移为27脚,避免0、1脚 PORTD = PORTD | j; /将新状态和原端口状态结合以控制LED脚 Serial.println(PORTD, BIN); / 输出掩盖以便调试 delay(100); 按位异或 C+中有一个不常见的操作符叫按位异或,也叫

36、做XOR。按位异或操作符用表示。此操作符和按位或很相似,区别是如果两个位都为1则结果为0: 0 0 1 1 运算元1 0 1 0 1 运算元2 - 0 1 1 0 - 返回的结果 按位异或的另一种解释是如果两个位值相同则结果为0,否则为1。 下面是一个简单的代码示例: int x = 12; / 二进制: 1100 int y = 10; / 二进制: 1010 int z = x y; / 二进制: 0110, 或十进制 6 / Blink_Pin_5 /演示“异或” void setup DDRD = DDRD | B00100000; / /设置数字脚5设置为输出 serial.begi

37、n; void loop PORTD = PORTD B00100000; / 反转第5位,其他保持不变 delay(100); (bitwise not) 按位取反 () 按位取反在C+ +语言中是波浪号。与和|不同,按位取反使用在一个操作数的右侧。按位取反将操作数改变为它的“反面”:0变为1,1变成0。例如: 0 1 operand1 - 1 0 operand1 int a = 103; / 二进制: 0000000001100111 int b = a; / 二进制: 1111111110011000 = -104 你可能会惊讶地看到结果为像-104这样的数字。这是因为整数型变量的最高

38、位,即所谓的符号位。如果最高位是1,这个数字将变为负数。这个正数和负数的编码被称为补。想了解更多信息,请参考Wikipedia文章twos complement. 顺便说一句,有趣的是,要注意对于任何整数型操作数X,X和-X-1是相同的。 有时,对带有符号的整数型操作数进行位操作可以造成一些不必要的意外。 (bitshift right) bitshift left () 描述 出自Playground的 The Bitmath Tutorial 在C+语言中有两个移位运算符:左移位运算符和右移运算符。这些操作符可使左运算元中的某些位移动右运算元中指定的位数。 想了解有关位的更多信息可以点击

39、这里。 语法 variable number_of_bits variable number_of_bits 参数 variable - (byte, int, long) number_of_bits integer 32 例子 int a = 5; / 二进制数: 0000000000000101 int b = a 3; / 二进制数: 0000000000000101, 或者说回到开始时的5 当你将x左移y位时,x中最左边的y位会逐个逐个的丢失: int a = 5; / 二进制: 0000000000000101 int b = a 14; / 二进制: 01000000000000

40、00 - 101中最左边的1被丢弃 如果你确定位移不会引起数据溢出,你可以简单的把左移运算当做对左运算元进行2的右运算元次方的操作。例如,要产生2的次方,可使用下面的方式: 1 0 = 1 1 1 = 2 1 2 = 4 1 3 = 8 . 1 8 = 256 1 9 = 512 10 3 /二进制:1111111111111110 这种结果,被称为符号扩展,往往不是你想要的行为。你可能希望左边被移入的数是0。右移操作对无符号整型来说会有不同结果,你可以通过数据强制转换改变从左边移入的数据: X = -16; /二进制:1111111111110000 int y = (unsigned int)x 3; / 二进制: 0001111111111110 如果你能小心的避免符号扩展问题,你可以将右移操作当做对数据除2运算。例如: INT = 1000; Y = X 3; 8 1000 /1000整除8,使y=125 复合运算符 + (incr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号