按位操作符以及相关内容

📅 发布时间:2026/7/13 4:28:52 👁️ 浏览次数:
按位操作符以及相关内容
目录按位操作符与逻辑操作符几个常见的操作符计算机结合性与优先级结构体整型提升算术提升概念空间储存函数返回值理解const理解:按位操作符与逻辑操作符双目操作符有两操作数。按位与二进制有0为0同时为1才为1。按位或二进制有1为1同时为0才为0。左移操作符向左移一位二进制位。使用后值变成2倍。右移操作符向右移一位二进制位。使用后值缩小2倍。且只移动正整数位不能移动小数位按位异或^两个二进制位相同为0相异为1。既然为1那该二进制位肯定不同支持交换律3^3^53^5^3。nnn-1把n二进制最右边的1去掉。原码反码补码反码取反不会动符号位。原码数值以二进制形式在内存中储存形式申请空间没存储的空间都是0最高位是符号位0为正1为负。反码原码取反但符号位保留。补码反码1。补码取反1原码原码也可以补码-1然后取反。CPU寄存器只有-法且是用补码运算。补码运算完后再还成原码。只有反码原码补码运算才有符号位的顾虑运算符号运算时所有位都要按规则运算包括符号位。正数的反码原码补码相同。逻辑与一假为假。逻辑或一真为真。单目操作符只有一个操作数。取地址操作符取地址。*解引用操作符用储存的地址找到那个地址中储存的值。按位取反:符号位也要取反二进制位都取反包括符号位。|~^:操作数都要为整数正负0它们都是对整数的补码进行操作补码的最高位01决定按正数还是负数规则取原码n(n-1)的作用是去掉n二进制里最左边的1如果写在循环里去完1后n会变成0.-n表示~n1负号的本质就是n1比如5经过-处理就得到-5nn(-n);取最右边的1原理1.二进制操作符都是针对补码进行的2.这些操作符运行完后产生的值还是补码最终结果再换成原码。1.储存有符号的整数最左边的二进制位的都是符号位2.它们最小的整数负数都没有对应的正数所以不存在有效补码码和原码。3.最小的整数负数补码统一为1符号位0……0。4.抛开0与最小的负数逻辑上来讲它们存储的数左右对称上来的图表结构中1与-1左右对称几个常见的操作符逗号表达式从左向右依次执行整个表达式的值为最右边表达式的结果。函数操作符调用参数以及函数都是他的操作数不它还可以强制转换改变计算机优先级[ ]下标引用操作符也叫索引操作数是地址原理*地址索引值。计算机结合性与优先级Ciiii是一个变量储存在内存空间。第一种优先级最优先i先处理完再处理法C12优先性优先于结合性。第二种优先级先计算两个的值再相加再优先于号又算C10第二次先准备好了两个值结合性优先于优先性。这几种都满足优先级结合性优先级都是相邻的操作符相比不可以与相隔的操作符比较。相隔的就要看结合性与优先级谁先运算1.优先级为主就要先比较所有符号的优先级优先的先运算后面再结合2.结合性为主前面的按照优先级先运算后面的等前面运算完再比较优先级运算结合性是相邻优先级相同时的运算方向大多数都是从左到右所以这种代码是不可靠的。操作符的优先级和结合性无法确定第一个与第三个的先后顺序。上面结合性与优先级冲突的具体原因前两个运行完第一个与第二个是同级所以要运行结合性但是最后一个比第二个优先级高结合性是所有符号同优先级运算此时第一个只能与第二个比较同级可以用结合性但是的优先级也比等二个更高到底是最后的先运算还是第一个这就不知道了结构体结构体就相当于清单清单上的变量就是它的成员变量成员变量可以是任何类型。结构体声明买菜清单白菜成员变量花菜水果厨具也可以这份清单上成员可以和目标没任何关联因为有程序员自己的思考所以列出的清单有逻辑关联。struct结构体关键字 tag结构体名称结构体的实现1.成员变量…………… P1结构体变量列表写几个创建几个变量也可以在这直接初始化。struct tag P2 {**}结构体变量初始化。结构体成员直接访问符.双目操作符P1.成员变量1//P1直接访问成员变量1的空间结构体间接访问符-P-XP中存了结构体的地址通过地址间接访问X存的空间int*p[ 5]p与[ ]先结合确定类型int*说明是指针数组。int*p[5]1.p先与*结合确定类型为指针该结构是数组指针该指针可以存空间为5个int大小的数组的地址2.理解指针一级指针指向的地址只有多个空间那么用第一次解引用它会退化为一个地址为数组头空间的一级指针该指针类型是内部空间类型的针指针类型3.如何在改数组存储值*p[1]1这样就可以存p是数组的地址*p找到数组的整块空间这整块空间包含多个int空间它会退化为一个地址为数组头空间且类型为int*的一级指针再次解引用运用指针加减法就可以找到单个int的空间整型提升空间比整形小的向整形转化叫整型提升。规则1.计算机储存的是补码截断和提升都发生在补码整型提升是取符号位来填充增加的二进制位对无符号数来说是最高位填充对补码操作完后的结果仍然是补码2.截断对于int以下的空间来说是只留下以符号位在左的最右边的空间大小的二进制位。比如int变cahr,只留下最右边的8个二进制位3.计算机默认int是有符号的整形unsighed int 需要写出来char有无符号取决于编译器。4.无符号数正数范围是有符号的两倍就是因为没有符号位“符号位”也是存储值的。5.char中\0它的ascii码是0又因为char内存中存储的的是整形然后通过整形对应ascii码输出字符所以找\0就是找内存中的0。算术提升概念比整形大的类型向比较大的类型提升。空间储存大端存储0x11223344,44是最低位置存入开辟空间中最高的地址小端存储就是低对低高对高。栈如何开辟空间从高到低开辟空间堆如何开辟空间从低到高开辟空间但是由于动态开辟与释放开辟空间并不连续。强制转换可以强制类型转换的逻辑是1.存在微弱的关联空间地址是空间的编号int,char也是空间的编号int arr[10]像这样的首地址就是整个空间的编号。2.空间里面存储数据的方式不变。int pp就相当于int空间首地址可以访问空间内容。比如int与指针都是直接储存内容double则是要通过不同二进制位区分小数和整数不可以与指针互转可以与int互转的原因是double具有整数位double转int只需要截断小数位就行了。指针转int:int p 2; int* o p; (int)o就是指针里面地址是整形与int有关联可以转换结果是地址变成了整形 (int *)((int)o0) ;*说明转换成了地址有访问空间的权力了int则是给了这个指针管理4个空间的权限 (int)o0被转换成整形就可以参加整形的运算 *(int *)((int)o0)通过解引用就可以访问被管理的四个空间了 想要得到结果就通过确实大小端存储方式来看一个地址编号默认为空间里面有一个字节大小。函数返回值理解为什么要开辟空间目前推测原因是“”的底层是开辟一个新空间然后返回这片空间至于函数返回值要开辟临时空间应该是编译器规定的const理解:const修饰函数返回值或者内置类型举例const int * 函数名假设给函数返回空间取名为t这里的意思是不可以通过“*t”(*t是地址地址也是空间的名称如果这空间的名字叫p,p也是空间的名称 )改变空间内地址指向空间的值本质还是const限制该名称的作用。const修饰类1.只允许用const 指针访问成员但不允许修改除非该该成员有特殊的关键字允许这样。2.类的地址也变成const 类* 3.所有成员带有常属性4.只能访问函数末尾有const修饰的函数应为该类的成员变量不允许修改。const修饰类原理当const修饰类或者类成员时const不仅修饰他们的名称也修饰他们的地址const 地址不可以通过地址来修改空间的值所以const 类对象的指针其实是const 类名*。const 类名 t; const 类名*指针对象t;