এখানে আমরা একটি ধাঁধা দেখব। ধরুন একটি প্রোগ্রাম আছে যা নীচে দেওয়া হয়েছে, আমাদের বলতে হবে আউটপুট কী হবে এবং কেন?
উদাহরণ
#include<iostream>
using namespace std;
int main() {
int x = 0xab;
~x;
cout << hex << x;
} তাহলে আউটপুট কি হবে? ~x পরিপূরক অপারেশন করছে। তাহলে এটি কি হেক্স আকারে পরিপূরক ফলাফল দেখায়?
ভাল আউটপুট নিম্নলিখিত মত
আউটপুট
ab
সুতরাং, কোন পরিবর্তন নেই. কিন্তু কেন? কারণ হল ~x x কে তার পরিপূরক আকারে রূপান্তর করছে, কিন্তু সেই মানটি কোনো ভেরিয়েবলে বরাদ্দ করা হয়নি। অভিব্যক্তিটি R- মান অভিব্যক্তি। Lvalue ব্যবহার না করা পর্যন্ত এটি কিছু ভেরিয়েবলে সংরক্ষণ করা হবে না। যদি আমরা L-মান রাখি তাহলে এটি এরকম দেখাবে −
উদাহরণ
#include<iostream>
using namespace std;
int main() {
int x = 0xab;
x = ~x;
cout << hex << x;
} আউটপুট
ffffff54