当前位置:首页 » 编程语言 » c语言j

c语言j

发布时间: 2022-02-13 22:38:35

c语言中j=j<<i;怎么理解啊也就是<<这个符号怎么理解

“<<”代表左移运算符(就相当于'shl')。该运算符为双目运算符,结合方向为从左到右,作用是把一个整型数的所有位向左移动指定的位数,移动到左边界之外的多余二进制位会被丢弃,并从右边界移入0。
左移运算的两个操作数应为整数类型。第一个操作数是要进行移位操作的数,第二个操作数指定第一个操作数移动的位数。如果第二个操作数等于0则不发生任何移位。
应用举例:
一,问:计算表达式14 << 2的值。
答:表达式14 << 2的值为56,因为14(即二进制的00001110)向左移两位等于56(即二进制的00111000)。
二,问: 计算表达式8 >> 2的值。
答:表达式8 >> 2的值为2,因为8(即二进制的00001000)向右移两位等于2(即二进制的00000010)。
摘自:网络

❷ c语言中J+=2是什么意思

J+=2也就是相当于这样的J=J+2。。就是先让J的值加上2,再把它赋给J,如果原先J是2的话,那么执行完J+=2之后,J的值就是4了 还有类似的a- =3,同样,就是相当于a=a-3

❸ C语言中*=j什么意思

a[j]=!a[j]在c语言中意思是给a[j]赋与其相反的真假值。例如,如果a[j]=1,那!a[j]=0,赋值后,a[j]=0,如果,a[j]=0,那!a[j]=1,赋值语句后,a[j]=1。

“!”(逻辑非)逻辑运算符。是指本来值的反值。" !0" 这个逻辑表达式的值为1。(判断的这个数为0,成立,则其表达式的值为1)。" !1" 这个逻辑表达式的值为0。(判断的这个数非0,不成立,则其表达式的值为0)。

(3)c语言j扩展阅读:

逻辑运算用来判断一件事情是“对”的还是“错”的,或者说是“成立”还是“不成立”,判断的结果是二值的,即没有“可能是”或者“可能不是”,这个“可能”的用法是一个模糊概念。

在计算机里面进行的是二进制运算,逻辑判断的结果只有二个值,称这二个值为“逻辑值”,用数的符号表示就是“1”和“0”。其中“1”表示该逻辑运算的结果是“成立”的,如果一个逻辑运算式的结果为“0”,那么这个逻辑运算式表达的内容“不成立“。

❹ C语言问题: j=*i j=&i j=*&i 三者有何区别

j=*i;//说明j是普通变量,i是指针变量,意思是把i指向的变量中的值赋值给j
j=&i//说明j是指针变量,i是普通变量,取i的地址然后赋值给j,这样j就指向i了
j=*&i//你得先确定*和&的优先级和结合性,*&i等价于*(&i),也就是先取i的地址,然后求这个地址所指向的内容,其实就是i,所以这里,j和i都是普通变量,此等式的含义就是把i的值赋值给j

❺ c语言表达式(j=3,j++)是什么意思

j++是j自增,不参与表达式的计算。
而++j则是将j先自增后再参与表达式计算。
如表达式(++j)+j
如开开始j=3,那么先自增1,j=4,并且后面的j也按4算
表达式的值为8

给你看个详细的别人的解释:
1.对++j的处理分两种情况,一种是在表达式进行运算之前就将++j计算,然后再进行表达式运算;第二种是在表达式运算的过程当中进行++j自增并计算表达式的值。
2.两种情况对j++的处理方式一样,都是表达式运算完成后自增,所以j++对表达式的运算无影响。

第一种情况:
就TC来说,他是第一种,先把++j进行自增,然后再进行加法运算,而不管++j出现的顺序,比如:

m+=(j++)+(++j)+(j++);

有一个++j,所以先将j自增一次,假设j = 2,自增一次后为3,最后的运算就是:

m += 3 + 3 + 3;

而不是
m += 2 + 3 + 4, 虽然结果都是m += 9
你试着把他们的顺序换一下:
m+=(j++)+(j++)+(++j);
++j换到了后面,结果仍然是3+3+3,而不是2+2+3,

再如:
m+=(j++)+(++j)+(j++)+(++j);
++j出现了2次,那么先将j自增两次,为4,表达等价于:
m+= 4 + 4 + 4 + 4;
而不是
m+=2+3+2+3;

看下这个表达式的汇编:
1 inc si ;自增j
2 inc si
3 mov ax,si ;加法运算
4 add ax,si
5 add ax,si
6 add ax,si
7 add di,ax
8 inc si ;自增j
9 inc si

第1行和第2行是将++j自增,3到7行是加法运算。8、9行是j++的自增,不参与表达式的运算。

所以使用这种编译方式的编译器,++j的位置对结果无影响。

第二种情况:
VC、dev c,好像gcc也是这种情况,他是在运算过程中对++j进行运算。所以++j的位置对结果有影响。

其中VC的还比较奇特,比如
m=(j++)+(++j)+(++j)+(j++)+(j++);
的汇编:
mov eax, DWORD PTR _j$[ebp]
add eax, 1
mov DWORD PTR _j$[ebp], eax ++j;
mov ecx, DWORD PTR _j$[ebp] m += j;
add ecx, DWORD PTR _j$[ebp] m += j;
mov edx, DWORD PTR _j$[ebp]
add edx, 1
mov DWORD PTR _j$[ebp], edx ++j;
add ecx, DWORD PTR _j$[ebp] m += j;
add ecx, DWORD PTR _j$[ebp] m += j;
add ecx, DWORD PTR _j$[ebp] m += j;
mov DWORD PTR _m$[ebp], ecx

结果是
m = 3 + 3 + 4 + 4 + 4 = 18
但是将其中一个++j调换顺序:
m=(j++)+(++j)+(j++)+(++j)+(j++);
结果是:
m = 3 + 3 + 3 + 4 + 4 = 17

但是
m = (j++)+(j++)+(++j)+(++j)+(j++)+(j++);
结果却是
m = 2 + 2 + 3 + 4 + 4 + 4 = 19

就是说前面两个在第二个++j之前都提前进行了++j,而第三个表达式没有。

总之比较奇特,跟VC编译器代码优化什么的有关系。而且你将VC6的编译改成release,上面第三个表达式的结果就是
m = 4 + 4 + 4 + 4 + 4 + 4 = 24,不是19了!

❻ C语言中k*=j是什么意思

你说的是这个么:

k= --j;等价于j=j-1,之后再把j的值赋给k;
列:main()
{int j=6,k;
printf("%d\n",k=--j);
}
输出5
(其实这里考到了自加与赋值运算以及他们的优先级
优先级:自加运算符>赋值运算符。

❼ c语言程序;j--和--j有什么区别

单独使用没有区别,但如果在表达式中出现有区别。
j-- 出现在表达式中时,j 会以当前值参与表达式运算中,最后才自减1.
--j 出现在表达式中时,j 会先自减1,然后以减1后的值参与到表达式运算中。
++ 也如此。

例如:
j = 3;
i = --j; // i 的值为 2, j 为2
// i = j--; // i 为3, j 为2

❽ C语言中的--j,是什么意思

j减去1,与j--不同在于,前者当前运算时已经减一,而后者是当前运算没有减
j = 2
a = --j;// a = 1
b = j--;// b = 1,前面j已经为1,当前的j--事后生效

❾ 在C语言中j---j等于多少

引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。
%f:输入输出为浮点型
虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),

热点内容
Uc浏览器上传 发布:2025-01-09 01:50:16 浏览:525
javamysqljar 发布:2025-01-09 01:50:14 浏览:770
屏幕设置密码怎么设置 发布:2025-01-09 01:48:01 浏览:342
快吧我的世界盒子服务器连接不上 发布:2025-01-09 01:36:11 浏览:380
搭建中转云服务器挖矿 发布:2025-01-09 01:27:12 浏览:548
存储过程中的for循环 发布:2025-01-09 01:25:38 浏览:861
阿里云服务器宽带是专线吗 发布:2025-01-09 01:22:42 浏览:602
上门修个密码箱锁多少钱 发布:2025-01-09 01:21:49 浏览:266
python企业培训 发布:2025-01-09 01:17:14 浏览:889
怎样存储气体 发布:2025-01-09 01:17:13 浏览:259