C语言中很难理解的部分

如题所述

首先应该明白,位运算是指对二进制位进行的运算(言下之意是要对其他进制数与二进制数的转换熟练掌握才能更好的理解),运算对象只能是整型数或字符型数据而非其他。位运算结果为整型数据。下面是各位运算符的介绍:
1、&,是指参与运算的两数对应位相与,也就是对应位都是1,则该位结果为1,否则为0.如,3&5运算过程如下:3&5的值为1
0000000000000011
(十进制无符号数3)
(&)0000000000000101
(十进制无符号数5)
0000000000000001
2、|,是指参与运算的两数对应位相或,也就是对应位都是0,则该位结果为0,否则为1.如,3|5运算过程如下:3|5的值为7
0000000000000011
(十进制无符号数3)
(|)0000000000000101
(十进制无符号数5)
0000000000000111
3、^,
是指参与运算的两数对应位相异或,也就是对应位都相同,则该位结果为0,否则为1.如,3^5运算过程如下:3^5的值为6
0000000000000011
(十进制无符号数3)
(^)0000000000000101
(十进制无符号数5)
0000000000000110
4、~,是指将一个二进制数按位取反,也就是1变0,0变1。如,~a运算过程如下:~a的值为(假定有int
a=3)-4
(~)
0000000000000011
(十进制无符号数3)
1111111111111100
5、<<
、是指将该符号左边的二进制位全部左移该符号右边指定的若干位,左边移出的位丢失,右边空出的位用0补充。左移没溢出时,移n位相当于该数乘以2的n次方。如,4<<2,运算过程如下
(<<)0000000000000100
0000000000010000
6、>>、是指将该符号左边的二进制位全部右移该符号右边指定的若干位,左边空出的位补原最左边的那位的值(有的编译系统补0)。右移n位相当于将该数除以2的n次方。如,4<<2运算过程如下:
(>>)0000000000000100
0000000000000001
(注:对于有符号数,在右移时,符号位将随同移动。符号位为1,最高位是补0或是补1
取决于编译系统的规定。Turbo
C和很多系统规定为补1。)
我也是个初学者,说的不对的地方希望多多指教。
补充:
1、按位与运算常用于取一个数中的某些指定位。如取整型数a的低8位,只要用a和0377按位与就可以了。
2、按位或运算常用于将一个数的某些位置1。如将整型数a的低8位全置1,只要用a和0377按位或即可。
3、按位异或运算常将一个数的某些位翻转,即0变1,1变0.如:将整型数a的低8位翻转,只要用a和0377按位异或即可。另外也可以不用中间变量实现两个变量值的交换。设有int
a=3,b=4;交换a和b的值可以有:a=a^b;b=b^a;a=a^b;实现。
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-08-04
首先楼主要知道二进制:
位运算分:
与&(1&1=1
1&0=0
0&0=0)
或|(1|0=1
1|1=1
0|0=0)
取反~(~1=0
~0=1)
异或^(1^0=1
1^1=0
0^0=0)
相同为0,不同为1
移位<<
>>()
&
00010001
&01001001
00000001
|
00010001
|01001001
01011001
~
~01001001
10110110
^
00010001
^01001001
01011000
<<
00010001
<<2
01000100
(右边加2个0,左边去掉两位)
>>
00010001
>>2
00000100
(左边加2个0,右边去掉两位)
第2个回答  2019-12-26
你把逻辑运算当作无进位的运算理解
比如算术运算
二进制:
1+1=10
逻辑运算
"或"
"or"
"+"
1+1
=
1
比如这个你可以理解为不进位的加

C语言哪个部分最困难?
也看了大家回答,基本上都是指针难,只要完全理解这一大章才算进入C的殿堂,抽象,逻辑,悟性都必须。至于英语高中水平足矣。

c语言哪个最难
最难的部分:C语言中的指针最难掌握。C语言中的指针是C语言的核心特性之一,也是其强大和灵活性的来源。但同时,指针也是C语言中难度最大的一部分。指针涉及到内存管理和地址操作,需要深入理解计算机内存结构和内存管理机制才能有效使用。不当的指针操作可能会导致内存泄漏、野指针等问题,使得程序出错甚至...

C语言中很难理解的部分
首先应该明白,位运算是指对二进制位进行的运算(言下之意是要对其他进制数与二进制数的转换熟练掌握才能更好的理解),运算对象只能是整型数或字符型数据而非其他。位运算结果为整型数据。下面是各位运算符的介绍:1、&,是指参与运算的两数对应位相与,也就是对应位都是1,则该位结果为1,否则为...

c语言函数哪部分难
在C语言中,函数的难点主要集中在函数参数的传递和返回值的处理上。这是因为C语言需要在函数调用时进行参数的压栈操作,同时在函数返回时需要进行数据的出栈操作。对于初学者来说,这些操作可能会比较困难,需要花费一定的时间去理解和掌握。此外,C语言中还存在一些高级的函数使用方法,例如函数指针、递归等...

c语言的难点
1、语言基础难理解。C语言是用来编写操作系统和很多系统中底层部件的一种语言。基础语言理解难度大,但是学习这门语言可以使语言基础稳固。2、计算机程序运行过程复杂。这门语言的核心特点就是精密,复杂,但是执行效率非常高。所以这门语言用来开发底层系统,以及适用范围非常广泛。3、典型的高级语言,掌握...

C语言的一个概念性问题,我很难理解。希望C理解的深的给我详细解释解释...
1.首先,因为[]优先级(顶级)高于*(次顶级),所以应先算[]。所以先只看(a+i)[j]。2.然后,这里一堆的东西不好看,做个简化:因为a是二维数组的名字,故a+i是第i行的行指针,相当于一个一位数组的数组名。把a+i记作x,那么(a+i)[j] 就可以记成 x[j]。3.由取下标运算的含义:x...

C语言基础的几个难点解析
例如:编写程序,输出三个整数的最大值。刚接触C语言的学生,大部分学生上机实践都可以完成这个程序,但是思路不太好。调整算法思路,便于以后程序的编写。main( ){ int a,b,c,max; max=a;if(b>max) max=b; if(c>max) max=c; printf("max=%d\n",max);} 同理,编写...

问几个C语言里很多人没注意过的问题
说实话要是这几个问题只要理解了C语言的人,怎么可能不明白。很多人没注意,说明他们还没学懂。当然我也不是在自夸,我也是初学者,可是我还是为楼上几位悲哀。1.你要知道程序在内存中的结构,有栈区、堆区、文字常量区、全局变量区、函数区,使用 char* a = "xxx";这样的语句初始化指针a,"...

c语言出结果那里不理解意思
n是浮点型数输出时小数的位数。前面有负号时输出结果靠左,不带符号时输出结果靠右。输出结果位数不小于m时,不受此限制。输出结果位数小于m时,对于前面有负号的,右边用空格补齐,对于前面没有符号的,左边用空格补齐。对于本题,m=1234.123,小数部分3位,共占8列。因此 printf("%-8.3f\\n",m)...

关于C语言中“浮点数”极其难以理解的难点。
浮点数减法不是精确的减法,正像判等要差小于很小很小一样的。略略懂,不要追问

相似回答
大家正在搜