收藏 分销(赏)

Arduino编程语言.doc

上传人:天**** 文档编号:4112175 上传时间:2024-07-30 格式:DOC 页数:68 大小:301KB 下载积分:14 金币
下载 相关 举报
Arduino编程语言.doc_第1页
第1页 / 共68页
Arduino编程语言.doc_第2页
第2页 / 共68页


点击查看更多>>
资源描述
Arduino编程参考手册 首页 程序结构 变量 基本函数 setup() loop() 控制结构 if if、、、else for switch case while do、、、while break continue return goto 相关语法  ; 分号 { 大括号 // 单行注释 /**/ 多行注释 #define 宏定义 #include 文件包含 算术运算符 = 赋值 + (加) - (减) * (乘) / (除)  % (取模) 比较运算符 == 等于  != (不等于) < (小于) > (大于) <= (小于等于) >= (大于等于) 布尔运算符 && (逻辑与) || (逻辑或)  ! (逻辑非) 指针运算符 * 指针运算符 & 地址运算符 位运算 & (位与) | (位或) ^ (位异或) ~ (位非) << (左移) >> (右移) 复合运算符 ++ (自加) -- (自减) += (复合加) -= (复合减) *= (复合乘) /= (复合除) &= (复合与) |= (复合或) 范围 HIGH | LOW INPUT | OUTPUT true | false 整型常量 浮点数常量 数据类型 void boolean char unsigned char byte int unsigned int word long unsigned long float double string String(c++) array 数据类型转换 char() byte() int() word() long() float() 变量作用域 变量作用域 static (静态变量) volatile (易变变量) const (不可改变变量) 辅助工具 sizeof() (sizeof运算符) ASCII码表 数字I/O pinMode() digitalWrite() digitalRead() 模拟I/O analogReference() analogRead() analogWrite() 指高级I/O shiftOut() pulseIn() 时间 millis() delay(ms) delayMicroseconds(us) 数学库 min() max() abs() constrain() map() pow() sqrt() 三角函数 sin(rad) cos(rad) tan(rad) 随机数 randomSeed() random() random() 位操作 lowByte() highByte() bitRead() bitWrite() bitSet() bitClear() bit() 设置中断函数 attachInterrupt() detachInterrupt() interrupts() noInterrupts() 串口通讯 begin() available() read() flush print() println() write() peak() serialEvent() 程序结构 (本节直译自Arduino官网最新Reference) ﻫ在Arduino中, 标准得程序入口main函数在内部被定义, 用户只需要关心以下两个函数: setup()ﻫ当Arduino板起动时setup()函数会被调用。用它来初始化变量,引脚模式,开始使用某个库,等等。该函数在Arduino板得每次上电与复位时只运行一次。 ﻫloop() 在创建setup函数,该函数初始化与设置初始值,loop()函数所做事得正如其名,连续循环,允许您得程序改变状态与响应事件。可以用它来实时控制arduino板。 示例: int buttonPin = 3; void setup() { Serial、begin(9600); //初始化串口 pinMode(buttonPin, INPUT); //设置3号引脚为输入模式 } void loop() {  if (digitalRead(buttonPin) == HIGH) serialWrite('H'); else  serialWrite('L'); delay(1000); } 控制语句 if if,用于与比较运算符结合使用,测试就是否已达到某些条件,例如一个输入数据在某个范围之外。使用格式如下: if (value > 50) { // 这里加入您得代码 } 该程序测试value就是否大于50。如果就是,程序将执行特定得动作。换句话说,如果圆括号中得语句为真,大括号中得语句就会执行。如果不就是,程序将跳过这段代码。大括号可以被省略,如果这么做,下一行(以分号结尾)将成为唯一得条件语句。 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); }        // 都就是正确得 圆括号中要被计算得语句需要一个或多个操作符。 if、、、else 与基本得if语句相比,由于允许多个测试组合在一起,if/else可以使用更多得控制流。例如,可以测试一个模拟量输入,如果输入值小于500,则采取一个动作,而如果输入值大于或等于500,则采取另一个动作。代码瞧起来像就是这样: if (pinFiveInput < 500) { // 动作A } else {   // 动作B } else中可以进行另一个if测试,这样多个相互独立得测试就可以同时进行。每一个测试一个接一个地执行直到遇到一个测试为真为止。当发现一个测试条件为真时,与其关联得代码块就会执行,然后程序将跳到完整得if/else结构得下一行。如果没有一个测试被验证为真。缺省得else语句块,如果存在得话,将被设为默认行为,并执行。 注意:一个else if语句块可能有或者没有终止else语句块,同理。每个else if分支允许有无限多个。 if (pinFiveInput < 500) { // 执行动作A } else if (pinFiveInput >= 1000) { // 执行动作B } else { // 执行动作C } 另外一种表达互斥分支测试得方式,就是使用switch case语句。 for for语句  描述  for语句用于重复执行被花括号包围得语句块。一个增量计数器通常被用来递增与终止循环。for语句对于任何需要重复得操作就是非常有用得。常常用于与数组联合使用以收集数据/引脚。for循环得头部有三个部分: for (初始化部分; 条件判断部分; 数据递增部分) { //语句块 。。。 } 初始化部分被第一个执行,且只执行一次。每次通过这个循环,条件判断部分将被测试;如果为真,语句块与数据递增部分就会被执行,然后条件判断部分就会被再次测试,当条件测试为假时,结束循环。 示例: //使用一个PWM引脚使LED灯闪烁 int PWMpin = 10; // LED在10号引脚串联一个470欧姆得电阻 void setup() {   //这里无需设置 } void loop() {    for (int i=0; i <= 255; i++){  analogWrite(PWMpin, i);   delay(10); } } 编码提示:ﻫC中得for循环比在其它计算机语言中发现得for循环要灵活得多,包括BASIC。三个头元素中得任何一个或全部可能被省略,尽管分号就是必须得。而且初始化部分、条件判断部分与数据递增部分可以就是任何合法得使用任意变量得C语句。且可以使用任何数据类型包括floats。这些不常用得类型用于语句段也许可以为一些罕见得编程问题提供解决方案。 例如,在递增部分中使用一个乘法将形成对数级增长: for(int x = 2; x < 100; x = x * 1、5){ ﻩprintln(x); } 输出: 2,3,4,6,9,13,19,28,42,63,94 另一个例子,在一个for循环中使一个LED灯渐渐地变亮与变暗: void loop() { int x = 1;  for (int i = 0; i > -1; i = i + x){  analogWrite(PWMpin, i);   if (i == 255) x = -1; // 在峰值切换方向 delay(10); } } switch case switch case 语句ﻫ就像if语句,switch、、、case通过允许程序员根据不同得条件指定不同得应被执行得代码来控制程序流。特别地,一个switch语句对一个变量得值与case语句中指定得值进行比较。当一个case语句被发现其值等于该变量得值。就会运行这个case语句下得代码。 break关键字将中止并跳出switch语句段,常常用于每个case语句得最后面。如果没有break语句,switch语句将继续执行下面得表达式(“持续下降”)直到遇到break,或者就是到达switch语句得末尾。 示例: switch (var) {    case 1:   //当var等于1执行这里     break; case 2:   //当var等于2执行这里   break;   default:   // 如果没有匹配项,将执行此缺省段     // default段就是可选得 } 语法 switch (var) { case label: // statements  break;   case label:   // statements   break; default:   // statements } 参数 var: 与不同得case中得值进行比较得变量  ﻫlabel: 相应得case得值 while while循环 描述: while循环将会连续地无限地循环,直到圆括号()中得表达式变为假。被测试得变量必须被改变,否则while循环将永远不会中止。这可以就是您得代码,比如一个递增得变量,或者就是一个外部条件,比如测试一个传感器。 语法: while(expression){ // statement(s) } 参数: expression - 一个(布尔型)C语句,被求值为真或假 示例: var = 0; while(var < 200){ // 做两百次重复得事情 var++;  } do、、、while do循环 do循环与while循环使用相同方式工作,不同得就是条件就是在循环得末尾被测试得,所以do循环总就是至少会运行一次。 do {   // 语句块 } while (测试条件); 示例: do { delay(50); // 等待传感器稳定   x = readSensors();  // 检查传感器得值 } while (x < 100); break break用于中止do,for,或while循环,绕过正常得循环条件。它也用于中止switch语句。 示例: for (x = 0; x < 255; x ++) { digitalWrite(PWMpin, x);   sens = analogRead(sensorPin);    if (sens > threshold){   // bail out on sensor detect    x = 0;   break; }  delay(50); } continue continue语句跳过一个循环得当前迭代得余下部分。(do,for,或while)。通过检查循环测试条件它将继续进行随后得迭代。 示例: for (x = 0; x < 255; x ++) {   if (x > 40 && x < 120){    // create jump in values continue;   }   digitalWrite(PWMpin, x);    delay(50); } return 终止一个函数,并向被调用函数并返回一个值,如果您想得话。 语法: return; return value; // both forms are valid 参数:  value: 任何类型得变量或常量 示例: //一个函数,用于对一个传感器输入与一个阈值进行比较 int checkSensor(){    if (analogRead(0) > 400) {    return 1; else{     return 0;  } } return 关键字对测试一段代码很方便,不需“注释掉”大段得可能就是错误得代码。 void loop(){ //在此测试代码就是个好想法 return; // 这里就是功能不正常得代码 // 这里得代码永远也不会执行 } goto 在程序中转移程序流到一个标记点 语法: label:  goto label; // sends program flow to the label 提示:ﻫ在C程序中不建议使用goto,而且一些C编程书得作者主张永远不要使用goto语句,但就是明智地使用它可以 简化某些代码。许多程序员不赞成使用goto得原因就是,无节制地使用goto语句很容易产生执行流混乱得很难被调试程序。 尽管如就是说,仍然有很多使用goto语句而大大简化编码得实例。其中之一就就是从一个很深得循环嵌套中跳出去,或者就是if逻辑块,在某人些条件下。 示例:  for(byte r = 0; r < 255; r++){   for(byte g = 255; g > -1; g--){     for(byte b = 0; b < 255; b++){ if (analogRead(0) > 250){ goto bailout;}       // 其它语句。。。         }    } } bailout: 相关语法 分号 用于一个语句得结束 示例 ﻩint a = 13; 提示 忘记在一行得末尾加一个分号将产生一个编译器错误。该错误信息可能就是明显得,且会提及丢失分号,但也许不会。如果出现一个不可理喻得或瞧起来不合逻辑得错误,其中一个首先要做得事就就是检查分号丢失。编译器会在前一行得附近发出抱怨。 大括号 大括号(又称括弧或花括号)就是C语言得主要组成部分。它们用在几个不同得结构中,大致如下,这可能会令初学者感到困惑。 一个左大括号必须有一个右大括号跟在后面。这就是一个常被称为平衡括号得条件。Arduino IDE(集成开发环境)包含一个方便得特性以检验平衡大括号。只需选择一个大括号,甚至直接在一个大括号后面点击插入点,然后它得逻辑上得同伴就会高亮显示。 目前此功能有些许错误,因为IDE经常在文本中(错误地)发现一个已经被注释掉得大括号。 初级程序员,与从BASIC转到C得程序员常常发现使用大括号令人困惑或畏缩。毕竟,用同样得大括号在子例程(函数)中替换RETURN语句,在条件语句中替换ENDIF语句与在FOR循环中替换NEXT语句。 由于大括号得使用就是如此得多样,当插入一个需要大括号得结构时,直接在打出开括号之后打出闭括号就是个不错得编程实践。然后在大括号之间插入一些回车符,接着开始插入语句。您得大括号,还有您得态度,将永远不会变得不平衡。ﻫ 不平衡得大括号常常导致古怪得,难以理解得编译器错误,有时在大型程序中很难查出。因为它们得多样得使用,大括号对于程序得语法也就是极其重要得,对一个大括号移动一行或两行常常显著地影响程序得意义。ﻫ大括号得主要用法 //函数 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) {   statement(s) }    else {      statement(s)   } 注释 注释就是程序中得一些行,用于让自己或她人了解程序得工作方式。她们会被编译器忽略,而不会输出到控制器,所以它们不会占用Atmega芯片上得任何空间。 注释唯一得目得就是帮助您理解(或记忆)您得程序就是怎样工作得,或者就是告知其她人您得程序就是怎样工作得。标记一行为注释只有两种方式:ﻫ示例 x = 5; //这就是一个单行注释。此斜线后得任何内容都就是注释   //直到该行得结尾 /* 这就是多行注释 - 用它来注释掉整个代码块 if (gwb == 0){  //在多行注释中使用单行注释就是没有问题得 x = 3;         /* 但就是其中不可以使用另一个多行注释 - 这就是不合法得 */ } //别忘了加上“关闭”注释符 - 它们必须就是平衡得 */ 提示 ﻫ当实验代码时,“注释掉”您得程序得一部分来移除可能就是错误得行就是一种方便得方法。这不就是把这些行从程序中移除,而就是把它们放到注释中,所以编译器就会忽略它们。这在定位问题时,或者当程序无法编译通过且编译错误信息很古怪或没有帮助时特别有用。 define #define 宏定义ﻫ宏定义就是一个有用得C组件,它允许程序员在程序编译前给常量取一个名字。在arduino中定义得常量不会在芯片中占用任何程序空间。编译器在编译时会将这些常量引用替换为定义得值。 这虽然可能有些有害得副作用,举例来说,一个已被定义得常量名被包含在一些其它得常量或变量名中。那样得话该文本将被替换成被定义得数字(或文本)。 通常,用const关键字定义常量就是更受欢迎得且用来代替#define会很有用。 ﻫArduino宏定义与C宏定义有同样得语法 语法 #define constantName value 注意‘#’就是必须得 示例: #define ledPin 3 // 编译器在编译时会将任何提及ledPin得地方替换成数值3。 提示ﻫ#define语句得后面分号。如果您加了一个,编译器将会在进一步得页面引发奇怪得错误。 #define ledPin 3;  // this is an error 类似地,包含一个等号通常也会在进一步得页面引发奇怪得编译错误。 #define ledPin  = 3  // this is also an error  include #include 包含 #include用于在您得sketch中包含外部得库。这使程序员可以访问一个巨大得标准C库(预定义函数集合)得集合。 AVR C库(AVR就是Atmel芯片得一个基准,Arduino正就是基于它)得主参考手册页在这里。 ﻫ注意#include与#define相似,没有分号终止符,且如果您加了,编译器会产生奇怪得错误信息。 示例 该示例包含一个用于输出数据到程序空间闪存得库,而不就是内存。这会为动态内存需求节省存储空间且使需要创建巨大得查找表变得更实际。 #include <avr/pgmspace、h> prog_uint16_t myConstants[] PROGMEM = {0, 21140, 702 , 9128, 0, 25764, 8456, 0,0,0,0,0,0,0,0,29810,8968,29762,29762,4500}; 算术运算符 赋值 =赋值运算符(单个等号) 把等号右边得值存储到等号左边得变量中。 ﻫ在C语言中单个等号被称为赋值运算符。它与在代数课中得意义不同,后者象征等式或相等。赋值运算符告诉微控制器求值等号右边得变量或表达式,然后把结果存入等号左边得变量中。 示例   int sensVal;       //声明一个名为sensVal得整型变量 senVal = analogRead(0);  //存储(数字得)0号模拟引脚得输入电压值到sensVal ﻫ编程技巧 赋值运算符(=号)左边得变量需要能够保存存储在其中得值。如果它不足以大到容纳一个值,那个存储在该变量中得值将就是错误得。 ﻫ不要混淆赋值运算符[ = ](单个等号)与比较运算符[ == ](双等号),后者求值两个表达式就是否相等。 加,减,乘,除 描述 这些运算符(分别)返回两人运算对象得与,差,积,商。这些操作受运算对象得数据类型得影响。所以,例如,9 / 4结果就是2,如果9与2就是整型数。这也意味着运算会溢出,如果结果超出其在相应得数据类型下所能表示得数。(例如,给整型数值32767加1结果就是-32768)。如果运算对象就是不同得类型,会用那个较大得类型进行计算。 如果其中一个数字(运算符)就是float类型或double类型,将采用浮点数进行计算。 示例 y = y + 3; x = x - 7; i = j * 6; r = r / 5; 语法 result = value1 + value2; result = value1 - value2; result = value1 * value2; result = value1 / value2; 参数: value1:任何变量或常量 value2:任何变量或常量 ﻫ编程技巧: 要知道整型常量默认为int型,因此一些常量计算可能会溢出(例如:60 * 1000将产生负得结果) 选择一个大小足够大得变量以容纳您得最大得计算结果。 要知道您得变量在哪一点将会“翻转”且要知道在另一个方向上会发生什么,例如:(0 - 1)或(0 - 32768)。 对于数学需要分数,就使用浮点变量,但就是要注意它们得缺点:占用空间大,计算速度慢。 使用强制类型转换符例如:(int)myFloat以在运行中转换一个变量到另一个类型。 取模 %(取模) 描述 计算一个数除以另一个数得余数。这对于保持一个变量在一个特定得范围很有用(例如:数组得大小)。 语法  result = dividend % divisor 参数 dividend: 被除数 divisor: 除数 结果:余数 示例 x = 7 % 5; // x now contains 2 x = 9 % 5;   // x now contains 4 x = 5 % 5;   // x now contains 0 x = 4 % 5;   // x now contains 4 示例代码 /* update one value in an array each time through a loop */ int values[10]; int i = 0; void setup() {} void loop() { values[i] = analogRead(0); i = (i + 1) % 10; // modulo operator rolls over variable } ﻫ提示: 取模运算符不能用于浮点型数。 比较运算符 if(条件) and ==, !=, <, > (比较运算符) if,用于与比较运算符联合使用,测试某一条件就是否到达,例如一个输入超出某一数值。if条件测试得格式: if (someVariable > 50) { // do something here } 该程序测试someVariable就是否大于50。如果就是, 程序执行特定得动作。换句话说,如果圆括号中得语句为真,花括号中得语句就会运行。否则,程序跳过该代码。 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); }         // all are correct 圆括号中被求值得语句需要使用一个或多个运算符: ﻫ比较运算符:  x == y (x is equal to y)  x != y (x is not equal to y) x < y (x is less than y)   x >  y (x is greater than y)  x <= y (x is less than or equal to y)   x >= y (x is greater than or equal to y) 警告: 小心偶然地使用单个等号(例如if(x = 10))。单个等号就是赋值运算符,这里设置x为10(将值10存入变量x)。改用双等号(例如if (x == 10)),这个就是比较运算符,用于测试x就是否等于10。后者只在x等于10时返回真,但就是前者将总就是为真。 这就是因为C如下求值语句if(x=10):10分配给x(切记单个等号就是赋值运算符),因此x现在为10。然后'if'条件求值10,其总就是为真,由于任何非零数值都为真值。由此,if (x = 10)将总就是求值为真,这不就是使用if语句所期望得结果。另外,变量x将被设置为10,这也不就是期望得操作。 if也可以就是使用[if、、、else]得分支控制结构得一部分。 布尔运算符 它们可用于if语句中得条件 && (逻辑与) 只有在两个操作数都为真时才返回真,例如: if (digitalRead(2) == HIGH  && digitalRead(3) == HIGH) { // read two switches   // 、、、 } 只在两个输入都为高时返回真 || (逻辑或) 任意一个为真时返回真,例如: if (x > 0 || y > 0) { // 、、、 } x或y任意一个大于0时返回真 ! (非) 当操作数为假时返回真,例如: if (!x) { // 、、、 } 若x为假返回真(即如果x等于0) 警告 确保您没有把布尔与运算符,&&(两个与符号)错认为按位与运算符&(单个与符号)。它们就是完全不同得概念。 同样,不要混淆布尔或运算符||(双竖杠)与按位或运算符|(单竖杠)。 按位取反~(波浪号)瞧起来与布尔非!有很大不同(感叹号或程序员口中得“棒”),但就是您仍然必须确保在什么地方用哪一个。 ﻫ例如 if (a >= 10 && a <= 20){}   // true if a is between 10 and 20 指针运算符 &(引用)与 *(间接引用) 指针对于C初学者来说就是更复杂得对象之一。并且可能写大量得Arduino程序甚至都不会遇到指针。ﻫ无论如何,巧妙地控制特定得数据结构,使用指针可以简化代码,而且在自己工具箱中拥有熟练控制指针得知识就是很方便得。 位运算 位与 按位与(&) 按位操作符在变量得位级执行运算。它们帮助解决各种常见得编程问题。以下大部分资料来自一个有关位数学得优秀教程,或许可以在这里找到。[1] ﻫ描述与语法 以下就是所有这些运算符得描述与语法。更详细得资料或许可以在参考指南中找到。 ﻫ按位与(&) 在C++中按位与运算符就是单个与符号,  用于其它两个整型表达式之间使用。按位与运算独立地在周围得表达式得每一位上执行操作。根据这一规则:如果两个输入位都就是1,结果输出1,否则输出0。表达这一思想得另一个方法就是:   0  0  1  1   operand1   0 1  0 1  operand2  ----------   0 0  0 1  (operand1 & operand2) - returned result 在Arduino中,int型就是16位得。所以在两个整型表达式之间使用&将会导致16个与运算同时发生。代码片断就像这样: int a = 92;  // in binary: 11100 int b = 101;   // in binary: 00101   int c = a & b;  // result:  00100, or 68 in decimal、 在a与b得16位得每一位将使用按位与处理。且所有16位结果存入C中,以二进制存入得结果值,即十进制得68。 按位与得其中一个最常用得用途就是从一个整型数中选择特定得位,常被称为掩码屏蔽。瞧如下示例: 位或 按位或(|) ﻫ在C++中按位或运算符就是垂直得条杆符号,|。就像&运算符,|独立地计算它周围得两个整型表达式得每一位。(当然)它所做得就是不同得(操作)。两个输入位其中一个或都就是1按位或将得到1,否则为0。换句话说:     0 0 1  1 operand1 0  1 0 1    operand2 ----------  0  1  1 1  (operand1 | operand2) - returned result 这就是一个使用一小断C++代码描述得按位或(运算)得例子:    int a =  92; // in binary: 11100   int b = 101;  // in binary: 00101 int c = a | b; // result: 11101, or 125 in decimal、 按位与与按位或得一个共同得工作就是在端口上进行程序员称之为读-改-写得操作。在微控制器中,每个端口就是一个8位数字,每一位表示一个引脚得状态。写一个端口可以同时控制所有得引脚。 PORTD就是内建得参照数字口0,1,2,3,4,5,6,7得输出状态得常量。如果一个比特位就是1,那么该引脚置高。(引脚总就是需要用pinMode()指令设置为输出模式)。所以如果我们写入PORTD = B00110001;我们就会让引脚2,3与7输出高。一个小小得问题就是,我们同时也改变了某些引脚得0,1状态。这用于Arduino与串口通讯,所以我们可能会干扰串口通讯。 我们得程序规则就是:ﻫ仅仅获取与清除我们想控制得与相应引脚对应得位(使用按位与)。ﻫ合并要修改得PORTD值与所控制得引脚得新值(使用按位或)。 int i;  // counter variable int j; void setup(){ DDRD = DDRD | B11111100; // set direction bits for pins 2 to 7, leave 0 and 1 untouched (xx | 00 == xx) // same as pinMode(pin, OUTPUT) for pins 2 to 7 Serial、begin(9600); } void loop(){ for (i=0; i<64; i++){ PORTD = PORTD & B00000011;  // clear out bits 2 - 7, leave pins 0 and 1 untouched (xx & 11 == xx) j = (i << 2);             // shift variable up to pins 2 - 7 - to avoid pins 0 and 1 PORTD = PORTD | j;       // bine the port information with the new information for LED pins Serial、println(PORTD, BIN); // debug to show masking delay(100);   } } 位异或 按位异或(^) 在C++中有一个有点不寻常得操作,它被称为按位异或,或者XOR(在英语中,通常读作“eks-or”)。按位异或运算符使用符号^。该运算符与按位或运算符“|”非常相似 ,唯一得不同就是当输入位都为1时它返回0。   0  0  1  1   operand1   0 1 0 1 operand2 ---------- 0  1  1  0   (operand1 ^ operand2) - returned result ﻫ瞧待XOR得另一个视角就是,当输入不同时结果为1,当输入相同时结果为0。 这里就是一个简单得示例代码:    int x = 12; // binary: 1100     int y = 1
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服