/*you cannot change anything from here below*/
main()
{
exit(0);
}
/*you cannot change anything from here up*/
Run Code Online (Sandbox Code Playgroud)
这是在一次采访中被问到的.
我被告知要在控制台上打印一些东西.
任何人?
main() {
if ( -1 < (unsigned char) 1 )
printf("less than");
else
printf("NOT less than");
}
Run Code Online (Sandbox Code Playgroud)
打印less than.因为,(unsigned char) 1 转换为 (signed char) 1然后:(signed) -1 < (signed) 1,因此输出less than.
但是,如果我将上面的代码更改为if ( (-1 < (unsigned int) 1 )
那么输出就是NOT less than.
所以很明显,当我将unsigned char更改为unsigned int时:
int a = -1;'-1'相同的结果替代问题:
在有符号和无符号算术期间...如何确定签名是否将转换为无符号或反之亦然.
为什么unsigned char和char之间的算术转换不同:显然unsigned转换为signed和unsigned int和int:显然签名转换为unsigned
PS:我知道这不依赖编译器.所以不要说它.
今天我读到了MD5哈希,并想知道这是否可行.看起来像一个递归问题...还是有解决方案?
我读到有关Endianness的信息,并了解蹲...
所以我写了这个
main()
{
int k = 0xA5B9BF9F;
BYTE *b = (BYTE*)&k; //value at *b is 9f
b++; //value at *b is BF
b++; //value at *b is B9
b++; //value at *b is A5
}
Run Code Online (Sandbox Code Playgroud)
k 等于 A5 B9 BF 9F
和(字节)指针" walk "o/p是9F BF b9 A5
所以我得到它的字节向后存储......好吧.
〜
所以现在我想它是如何存储在BIT级别的......
我的意思是"9f"(1001 1111)存储为"f9"(1111 1001)?
所以我写了这个
int _tmain(int argc, _TCHAR* argv[])
{
int k = 0xA5B9BF9F;
void *ptr = &k;
bool temp= TRUE;
cout<<"ready or not here I come \n"<<endl; …Run Code Online (Sandbox Code Playgroud) 1)用户模式进程具有其自己的"地址上下文",其将用户模式虚拟地址映射到唯一的物理页面帧集合.也就是说,当Windows XP调度程序切换线程时,任何特定虚拟地址的含义都会随时改变.
"切换线程"的部分工作是更改页表,以便它们引用传入线程的进程上下文.
_
2)Windows内核模式驱动程序在"任意线程上下文"中执行.
驱动程序可以创建一个系统线程并在其上下文中工作......但我正在讨论当一个人没有创建系统线程时的情况.
驱动程序可以使用"ExAllocatePoolWithTag"来分配分页(内存在易失性存储中).
_
3)那么驱动程序如何在没有任何上下文的情况下访问分页内存?
如第1点所示,通过"特定于上下文"的页表访问分页内存.
当驱动程序在一些其他线程上下文中运行时...即页表条目指向线程相关的phy.mem,那么驱动程序如何才能访问他的分页内存?
PS:我在内核编程方面的努力.别生气.
const int z = 420;
printf("\n%d | %d",z ,*(&(*(&z+1))-1) );
// O/P:420 | 420
printf("\n%u | %u",&z,(&(*(&z+1))-1) ); //address
// O/P:1310548 | 1310548
*((char *)&z+1) = 21; //I change value for the 1st-Bit
//corrupting constant
printf("\n%d | %d",z ,*(&(*(&z+1))-1) );
//the complex(not really) expression evaluates to z
// O/P:420| 5540
printf("\n%u | %u",&z ,(&(*(&z+1))-1) );
//the complex(not really) expression evaluates to &z
// O/P:1310548 | 1310548
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
似乎我已成功修改了C中的常量
通过修改我的意思是我已经改变了常量地址范围中的位
因为"复杂(不是真的)统一/身份表达"在腐败后改变了价值.
但是z保持不变.为什么?
在解引用时,同一地址如何具有不同的值.?
PS:你可以使用任何身份表达
eg.printf("%d",*(int*)((char*)&(*((char*)&z+1))-1));
Run Code Online (Sandbox Code Playgroud)
[编辑]
好吧让我重新说一下:
z = 420
&z …Run Code Online (Sandbox Code Playgroud)